4

我正在尝试找到具有特定签名的构造函数。此构造函数在当前类型中不存在,但在其父类型中存在。为了显示:

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),自然有效。

在寻找父构造函数方面我有什么遗漏吗?

4

3 回答 3

4

构造函数不是继承的,所以你不能通过孩子找到它们,即使是FlattenHierarchy.

您必须遍历孩子才能找到它。

于 2012-09-18T09:06:38.823 回答
2

Child 类根本没有您要查找的构造函数。你不能写:

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

所以寻找不能用于实例化给定类型的构造函数是没有意义的。

Child 类所拥有的只是默认构造函数:

Child c = new Child();

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

于 2012-09-18T09:09:05.287 回答
1

试着打电话

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

你会明白为什么构造函数在Child.

于 2012-09-18T09:09:54.343 回答