2012-09-18 52 views
4

我试图找到具有特定签名的构造函数。此构造函数在当前类型中不存在,但它在其父类中存在。为了说明:C#GetConstructor()不返回父构造函数

public class Base 
{ 
    public Base() 
    { 

    } 

    public Base(string a1, string a2, string a3) 
    { 
     ... 
    } 
} 

public class Child : Base 
{ 

} 

的问题是,我似乎无法找到.ctor与字符串参数与.GetConstructor,甚至还试图如:

typeof(Child).GetConstructor(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance, null, new Type[] { typeof(string), typeof(string), typeof(string) }, null); 

typeof(Child)typeof(Base),自然,作品。

有没有什么我找不到关于寻找父构造函数?

回答

3

构造函数不是继承的,所以即使使用FlattenHierarchy也无法通过子元素找到它们。

你必须通过儿童循环找到它。

1

Child类根本没有你正在寻找的构造函数。你不能写:

Child c = new Child("a", "b", "c"); 

所以这是毫无意义的寻找,不能用于实例给定类型的构造函数。

所有的儿童类有是默认的构造函数:

Child c = new Child(); 

如果除去从Base类的默认构造函数,则Child类将有您正在寻找的构造。

+0

从“Base”中删除默认构造函数不会给Child提供三个参数构造函数。起初我以为这是一件非常整洁的东西,我从来不知道,但我在.NET 4中试过,并且不,仍然得到“'Child'不包含带3个参数的构造函数” –

0

尝试调用

var child = new Child("1", "2", "3") 

,你就会明白为什么构造上不可Child