1

スーパークラスでサブクラスタイプを取得したい。私は試した

if(this is SubClass1)

スーパークラスでしたが失敗しました。

4

2 に答える 2

2

スーパークラスは自分のサブクラスについて知らず、知るべきではありません。サブクラスはスーパークラスを拡張する必要があり、スーパークラスについて知っています。

あなたが達成しようとしていることは不可能です。問題/アーキテクチャを解決する別の (より良い) 方法があるはずです。

于 2012-11-07T16:30:57.843 に答える
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 に答える