我目前正在尝试学习反射,并看到了一些使用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方法(除了"该方法是以这种方式构造的"(。在我看来,逻辑inparameter应该是一个整数,包含我试图通过反射获得的构造函数的索引。如果存在原因,有人能解释为什么使用类型数组作为参数吗?
构造函数通过签名进行搜索,即通过参数类型的有序列表进行搜索。这就是为什么您需要传递构造函数参数类型的数组。在我看来,这很合乎逻辑。
它需要一个Type[]
来搜索具有特定签名的constructor
。
Constructor
中接受的array represent the order of Parameter
类型
根据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
,因为不存在将long
作为参数的constructor
因为构造函数可以有零个或多个参数。类型列表告诉反射要获取哪个构造函数。
[..]我不明白为什么我需要创建一个伪类型数组能够使用GetConstructor方法(除了"以这种方式构建"(
通常,反射可以解决诸如"从已知具有构造函数的类型创建对象,该构造函数采用int、string和double。"这样的问题。考虑到这一点,提供参数类型数组作为输入是有意义的。既然您正在从一个可能有多个构造函数的类型中寻找一个单个构造函数,那么您还希望如何消除歧义呢?
在我看来,逻辑In参数应该是一个包含我试图通过反射获得的构造函数的索引。
你希望这个指数代表什么?成员不能保证由反射API按照在源编程语言中声明的顺序排序。在任何情况下,看起来都需要一个可以枚举/索引到的构造函数数组。Type.GetConstructors
将对此有所帮助。