构造函数的反射

Reflection for Constructors

此处:

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

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

为什么我们指定

new Type[0] 在 X 行中,即使默认构造函数中没有参数

(new[] { typeof(int) }) 在 Y 行! argument/parameter field.Similar 内的花括号问题在 Z 行

我在 Whosebug 上进行了搜索 - 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();
        }
    }
}

Why do we specify "new Type[0]" in Line X even though there are no parameters in Default Constructor

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

Why do we specify "(new[] { typeof(int) })" in Line Y! Curly braces inside argument/parameter field.

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

Similar problem in Line Z.

答案相同,只是这次您创建的是参数数组,而不是参数类型。

simplest overload of Type.GetConstructor 仍然采用类型数组来指示您要获取的构造函数的参数。

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