建设者的反思

时间:2015-10-05 15:49:00

标签: c# .net reflection

下面:

defaultCon将自身绑定到Dog()构造函数

legCon将自身绑定到Dog(int legs)构造函数

为什么要指定

即使默认构造函数

中没有参数,行X中的

new Type[0]也是如此 第Y行中的

(new[] { typeof(int) })!参数/参数字段内的大括号。行Z中的类似问题。

我在StackOverflow上搜索 - this答案接近但没有回答我的问题。这是我的代码:

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();
        }
    }
}

2 个答案:

答案 0 :(得分:2)

  

为什么我们指定" new Type [0]"在行X中,即使默认构造函数

中没有参数

要说没有参数 - 所以参数 types 的数组是空的。

  

为什么我们指定"(new [] {typeof(int)})"在Y行!参数/参数字段中的大括号。

使用单个元素创建数组或参数类型 - 与int对应的类型。

  

第Z行中的类似问题。

同样的答案,除了这次你创建一个参数数组而不是参数类型。

答案 1 :(得分:0)

simplest overload of Type.GetConstructor仍然采用一系列类型来指示您尝试获取的构造函数的参数。

Type[0]空数组,表示没有参数。