【问题标题】:AS3 - Abstract ClassesAS3 - 抽象类
【发布时间】:2010-12-05 00:50:02
【问题描述】:

如何在 AS3 中很好地制作抽象类?

我试过了:

public class AnAbstractClass
{
    public function toBeImplemented():void
    {
        throw new NotImplementedError(); // I've created this error
    }
}

public class AnConcreteClass extends AnAbstractClass
{
    override public function toBeImplemented():void
    {
        // implementation...
    }
}

但是..我不喜欢这种方式。并且没有编译时错误。

【问题讨论】:

    标签: actionscript-3 oop abstract-class


    【解决方案1】:
    package 
    {
        import flash.errors.IllegalOperationError;
        import flash.utils.getDefinitionByName;
        import flash.utils.getQualifiedClassName;
        import flash.utils.getQualifiedSuperclassName;
    
        public class AbstractClass 
        {
            public function AbstractClass()
            {
                inspectAbstract();
            }
    
            private function inspectAbstract():void 
            {
                var className : String = getQualifiedClassName(this);
                if (getDefinitionByName(className) == AbstractClass ) 
                {
                    throw new ArgumentError(
                    getQualifiedClassName(this) + "Class can not be instantiated.");
                }
            }
    
            public function foo():void
            {
                throw new IllegalOperationError("Must override Concreate Class"); 
            }
        }
    }
    

    package
    {
        public class ConcreteClass extends AbstractClass
        {
            public function ConcreteClass()
            {
                super();
            }
    
            override public function foo() : void 
            {
                trace("Implemented");
            }
       }
    }
    

    【讨论】:

      【解决方案2】:

      在 AS3 中将只使用接口来确保所有功能都在编译时实现。 我知道它有所不同,但是对于上面的示例,它可以解决问题。

      【讨论】:

        【解决方案3】:

        只要它们不允许在 actionscript 中使用非公共构造函数,您就必须依赖抽象类和单例的运行时错误。

        【讨论】:

          【解决方案4】:

          actionscript 3 不支持抽象类。请参阅http://joshblog.net/2007/08/19/enforcing-abstract-classes-at-runtime-in-actionscript-3/

          上述参考资料还提供了一种在 as3 中创建抽象类的骇人听闻的解决方法。

          编辑
          另见http://www.kirupa.com/forum/showpost.php?s=a765fcf791afe46c5cf4c26509925cf7&p=1892533&postcount=70

          编辑 2(回应评论)

          很遗憾,您遇到了运行时错误。另一种选择是拥有一个受保护的构造函数....除了 as3 也不允许这样做。请参阅 http://www.berniecode.com/blog/2007/11/28/proper-private-constructors-for-actionscript-30/http://gorillajawn.com/wordpress/2007/05/21/actionscript-3-%E2%80%93-no-private-constructor/

          您可能还会发现这些有用:http://www.as3dp.com/category/abstract-classes/,尤其是http://www.as3dp.com/2009/04/07/design-pattern-principles-for-actionscript-30-the-dependency-inversion-principle/

          【讨论】:

          • 这很有帮助,但它只有运行时错误。有没有办法在编译时进行检查?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多