1

我想在超类中获得子类类型。我试过

if(this is SubClass1)

在超级班但失败了。

4

2 回答 2

2

您的代码有效:

package{
    import flash.display.Sprite;

    public class TestSuperClass extends Sprite{
        public function TestSuperClass(){
            super();
            trace((new SuperClass).isSubclass); // Output : false
            trace((new Extended).isSubclass); // Output : true
        }
    }
}

internal class SuperClass
{
    public function get isSubclass() : Boolean{
        return this is Extended;
    }
}

internal class Extended extends SuperClass {}

您可以动态地执行此操作(这很丑陋,对性能不友好,但可以完成工作):

package{
    import flash.display.Sprite;

    public class TestSuperClass extends Sprite{
        public function TestSuperClass(){
            super();

            trace((new SuperClass).isSubclass); // Output : false
            trace((new SuperClass).superClass); // Output : Object
            trace((new Extended).isSubclass); // Output : true
            trace((new Extended).superClass); // Output : SuperClass
        }
    }
}
import flash.utils.describeType;

internal class SuperClass
{
    public function get isSubclass() : Boolean{
        return describeType(this).@base.toString() != "Object";
    }

    public function get superClass() : String
    {
        return describeType(this).@base.toString().split("::").pop();
    }
}

internal class Extended extends SuperClass {}
于 2012-11-07T16:15:08.327 回答
2

超类不知道他的子类,也不应该知道。一个子类扩展了他的超类,所以应该知道他的超类。

你想要达到的目标是不可能的。应该有其他(更好的)方法来解决您的问题/架构。

于 2012-11-07T16:30:57.843 回答