2012-11-07 82 views
1

我想要獲取超類中的子類類型。 我在超市類 試圖如何在ActionScript3中檢查超類中的子類類型

if(this is SubClass1) 

,但失敗了。

+0

你究竟在做什麼?可能比檢查基類的類型更好。 –

+0

如果使用「is」關鍵字不起作用,那麼你編碼錯了。 –

+0

我認爲這實際上會失敗,因爲「this」是在超類型中定義的代碼中的超類類型的「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 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)[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

相關問題