2010-08-20 92 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