2010-08-04 76 views
1

的類型使用反射DerivedClassB我們可以確定:
一個),它使用的基類構造函數採用一個串PARAM
b)中,它通過的實際值?使用反射來確定哪個基類構造函數被調用

public class BaseClass 
{ 
    public BaseClass() 
    {    
    } 

    public BaseClass(string someParameter) 
    {    
    } 
} 

public class DerivedClassA : BaseClass 
{ 
    public DerivedClassA() 
    {    
    } 
} 

public class DerivedClassB : BaseClass 
{ 
    public DerivedClassB(): base("canWeFindThis") 
    {    
    } 
} 

回答

4

a)是的。從技術上講,你可以找出哪些其他構造函數被調用,如果你從ConstructorInfo.GetMethodBody()讀取信息,但沒有像Mono.Cecil這樣的輔助函數庫,你必須從字節數組中解碼IL。

b)在你的情況,是的,但通常沒有。反射只能用於反映靜態數據,而不能用於運行時動態狀態,所以您將無法使用它來知道哪些值作爲參數傳遞給構造函數,除非它被指定爲文字,就像您已經在在這種情況下,您可以使用與ConstructorInfo.GetMethodBody()或Mono.Cecil相同的技術。

+0

謝謝。 Re b) - 因爲在我的例子中,被傳遞的字符串是一個字面值,它是否可以在IL中找到? – zadam 2010-08-05 01:44:40

+0

是的,你是對的。我更新了我的答案以反映這一點,可以這麼說。 – 2010-08-05 09:53:45

1

作爲後續,我意識到傳遞給基類的值實際上是通過基類上的屬性公開的。

因此,對於我的場景,我只是實例化類型,然後詢問屬性的值以找出實際上在構造函數中傳遞的內容。 HTH。

相關問題