2010-08-20 39 views
1

我有一個通用的抽象基類,我想從中通過reflection.emit構建的動態類型派生它。另外我需要自定義派生類的默認構造函數來初始化一些字段。要正確構建派生類的默認構造函數,我需要獲取基類的默認構造函數並調用它。問題是我無法從基類獲取默認構造函數。獲取通用抽象類的默認構造函數

一個例子:

public abstract class Test<T> 
{ 
    private T data; 

    public abstract void Go(); 
} 

public class TestDerive : Test<int> 
{ 
    public override void Go() 
    { 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     ConstructorInfo[] constructors = typeof(Test<>).GetConstructors(); 

     int length = constructors.Length; 
    } 
} 

我用盡了一切和長度始終爲零。我不明白。我已經在反射器中檢查了類似的情況,並且確實有一個對抽象類的基礎構造函數的調用。問題是我怎樣才能做到這一點?

回答

6

抽象類的默認構造函數是受保護的 - 您需要指定綁定標誌以通過反射來訪問它。您可以使用

typeof(Test<>).GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance) 

(這沒有什麼實際的區別無論是公衆還是在正常的代碼保護的,當然,因爲你不能調用構造函數以外從派生型。)

請注意,無論該類是否是通用的,都是這種情況 - 這是導致您遇到問題的抽象。

+0

非常感謝。而已 – 2010-08-20 07:46:58