我目前正在尝试学习反射,并且已经看到了一些使用GetConstructor的示例,我想这是我需要理解的基本功能之一,能够开始使用反射。我认为我理解代码的作用以及如何使用它。
msdn的代码示例
http://msdn.microsoft.com/en-us/library/h93ya84h.aspx
types[0] = typeof(int);
// Get the constructor that takes an integer as a parameter.
ConstructorInfo constructorInfoObj = myType.GetConstructor(types);
我对代码唯一的问题是,我无法理解为什么我需要创建一个虚拟类型数组才能使用GetConstructor方法(除了“方法以这种方式构造”) )。在我看来,逻辑参数将是一个整数,包含我试图通过反射得到的构造函数的索引。如果存在某种原因,有人可以解释为什么类型数组被用作参数吗?
答案 0 :(得分:4)
通过签名搜索构造函数,即通过参数类型的有序列表。这就是你需要传递一组构造函数参数类型的原因。在我看来,这是合乎逻辑的。
答案 1 :(得分:2)
需要Type[]
来搜索具有特定签名的constructor
。
array represent the order of Parameter
Constructor
类型
根据MSDN上提供的示例
public class MyClass1
{
public MyClass1(){}
public MyClass1(int i){}
}
如果您通过了
之类的内容Type[] types = new Type[1];
types[0] = typeof (long);
ConstructorInfo constructorInfo = typeof (MyClass1).GetConstructor(types);
constructorInfo
本来是null
,因为不存在以constructor
作为参数的long
答案 2 :(得分:1)
因为构造函数可以包含零个或多个参数。类型列表告诉反射要获取哪个构造函数。
答案 3 :(得分:1)
[..]我无法理解为什么我需要创建一个虚拟类型数组 能够使用GetConstructor方法(除了“方法是 以这种方式构建“)
通常,反射解决了诸如“从已知具有构造函数的类型创建对象的问题,然后是字符串,然后是双精度”的问题。考虑到这一点,提供参数类型数组作为输入是有意义的。既然你正在寻找一个可能有几个的单个构造函数,你还有什么希望消除歧义?
在我看来,参数中的逻辑将是一个包含的整数 我试图通过反思得到的构造函数的索引。
您希望此索引代表什么?成员不能保证由反射API以与源编程语言中声明的顺序相同的顺序进行排序。
无论如何,看起来你想要一个可以枚举/索引的构造函数数组。 Type.GetConstructors
会对此有所帮助。