2011-09-14 76 views
1

我有一個叫做Transaction的超類,它有一個名爲TransactionId的屬性。該屬性必須在所有子類的構造函數中設置爲某個值。反射:沒有實例化得到屬性值

public class SubTransaction : Transaction 
{ 
    public SubTransaction() : base() 
    { 
     this.TransactionId = "IdTransaction"; 
    } 
} 

我有很多這樣的子類。

我想要做的事:使用反射裝載這些SubTransactions的程序集並獲取由每個設置的Id。那可能嗎?

順便說一下,我無法實例化對象,因爲我沒有所需的全部信息。我完全不可能這樣做。

回答

3

好吧你可能嘗試閱讀構造函數的主體的IL,但我真的不會建議它。

我不知道它是否可能不是更好的裝飾每一類有一個屬性,和閱讀,而不是...

[TransactionId("IdTransaction")] 
public class SubTransaction : Transaction 
{ 
} 

的基類可以加載事務ID以同樣的方式,如果它仍然需要。

或者,每個類可以聲明常數領域,始終以同一個名字:

public class SubTransaction : Transaction 
{ 
    public const string ConstTransactionId = "IdTransaction"; 

    public SubTransaction() : base() 
    { 
     this.TransactionId = ConstTransactionId; 
    } 
} 

這應該是很容易與反思閱讀。這是醜陋的,但你基本上是在一個醜陋的情況...

+0

我還是想過,但現在是不可能做出性別改變,因爲時間是時鐘:/但我怎麼讀IL身體? – rpf

+0

@rpf:要使用一個屬性讀取IL主體並理解它,需要付出很多努力。雖然會用另一個選項編輯。 –

0

這是不可能的。

相反,您可以創建一個自定義屬性,該屬性採用一個ID並將其應用於每個子類。