2012-11-07 3 views
1

수퍼 클래스에서 하위 클래스 유형을 가져 오려고합니다. 나는 슈퍼 클래스 에ActionScript3에서 수퍼 클래스의 하위 클래스 유형을 확인하는 방법

if(this is SubClass1) 

을 시도했지만 실패했습니다.

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 {} 

당신은 동적으로 할 수 있습니다 (즉 친화적이지 성능, 추한,하지만 작업 수행) :

+0

정확히 무엇을하려합니까? 기본 클래스의 유형을 확인하는 것보다 더 좋은 방법이있을 수 있습니다. –

+0

"is"키워드를 사용하면 문제가 발생한 것입니다. –

+0

"this"가 super 유형으로 정의 된 코드에서 superclass 유형에 대해 "upcast"이기 때문에 실제로 실패 할 것이라고 생각합니다. (문서화되지 않았기 때문에 완전히 확신 할 수는 없지만 비슷한 행동을합니다. 슈퍼 클래스에서 해당 클래스의 새 인스턴스를 만드는 경우 동일한 문제가 발생하는지 궁금합니다. 무한 재귀/루프를 만들지 않도록 조심해야합니다. – shaunhusain

답변

2

코드는 작동 슈퍼 클래스에 대해

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)[email protected]() != "Object"; 
    } 

    public function get superClass() : String 
    { 
     return describeType(this)[email protected]().split("::").pop(); 
    } 
} 

internal class Extended extends SuperClass {} 
+0

작동하지만 실제로 코드를 디자인하는 좋은 방법은 아닙니다 – automaticoo

+0

맞습니다. 동적으로 처리하는 방법을 추가했습니다. 나는 그것이 좋지 않다는 사실에 동의하지만 당신은 그것을 할 수 있습니다. –

+0

+1 할 수있는 방법. – automaticoo

2

알고하지 않습니다 그의 하위 클래스와 모를 것입니다. 하위 클래스는 자신의 수퍼 클래스를 확장하므로 자신의 수퍼 클래스에 대해 알고 있어야합니다.

달성하려는 것은 불가능합니다. 문제/아키텍처를 해결할 다른 (더 나은) 방법이 있어야합니다.

+0

수퍼 클래스가 자신의 하위 클래스에 대해 알 수 있습니다 –

+1

@Simsoft 내가 동의하지 않는 이유는 무엇을 말하고 싶은 가라는 질문에 OP가 가능해야합니다. 그러나 기본 지식을 기반으로하는 기본 클래스를 작성하는 것은 좋지 않습니다. 하위 클래스는 코드를 수정하거나 수정하지 않고 즉시 해당 객체에서 임의로 확장 할 수있는 기능을 즉시 망 쳤기 때문에 (반드시 그런 것은 아니지만 이러한 가능성을 창출합니다). – shaunhusain

+0

그건 가능하다고 확신하지만, 누군가가 그 의미를 이해하지 못한다면 나는 정말로 그것을 제안하지 않을 것입니다. – shaunhusain

관련 문제