此处:
defaultCon
将自身绑定到Dog()
构造函数
legCon
将自身绑定到Dog(int legs)
构造函数
为什么我们指定
即使默认构造函数中没有参数,X行中的new Type[0]
Y行(new[] { typeof(int) })
!参数/参数字段内的花括号。Z线出现类似问题。
我在StackOverflow上搜索了一下——这个答案很接近,但没有回答我的问题。这是我的代码:
namespace Coding
{
internal class Dog
{
public int NumberOfLegs { get; set; }
public Dog()
{
NumberOfLegs = 4;
}
public Dog(int legs)
{
NumberOfLegs = legs;
}
}
public class Class1
{
static void Main(string[] args)
{
/*line X*/ var defaultCon = typeof(Dog).GetConstructor(new Type[0]); // Get Default Constructor without any params
/*line Y*/ var legCon = typeof(Dog).GetConstructor(new[] { typeof(int) });//get constructor with param int
var defaultDog = defaultCon.Invoke(null) as Dog;//invoke defaultCon for a Dog Object
/*Line Z*/ var legDog = legCon.Invoke(new object[] { 5 });//invoke legCon for a Dog object(Sets number of legs as 5) as Dog
Console.Read();
}
}
}
为什么我们在X行指定"new Type[0]",即使默认构造函数中没有参数
如果说没有参数,那么参数类型的数组是空的。
为什么在Y行指定"(new[]{typeof(int(}("!参数/参数字段内的花括号。
使用单个元素创建一个数组或参数类型,该类型对应于int
。
Z线出现类似问题。
答案是一样的,只是这次创建的是一个参数数组,而不是参数类型。
Type.GetConstructor
最简单的重载仍然使用一个类型数组来指示您试图获取的构造函数的参数。
值Type[0]
是一个空数组,表示没有参数。