为什么type.getConstructor将类型数组作为参数?

时间:2013-03-18 16:56:35

标签: c# reflection constructor

我目前正在尝试学习反射,并且已经看到了一些使用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方法(除了“方法以这种方式构造”) )。在我看来,逻辑参数将是一个整数,包含我试图通过反射得到的构造函数的索引。如果存在某种原因,有人可以解释为什么类型数组被用作参数吗?

4 个答案:

答案 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会对此有所帮助。