C#的反射中使用带参的构造函数进行构建对象

随便写点代码,发现了这个问题。。。

因为一开始使用的Assembly.Load.CreateInstance是无法加参数的。。。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Configuration;

namespace DecorationClass
{
    class Player
    {
        public Player(string Name)
        {
            this._Name = Name;
            Console.WriteLine("1");

        }
        private readonly string _Name;

        public string Name
        {
            get { return _Name; }
        } 

    }
    class Program
    {
        static void Main(string[] args)
        {
            Player player1;
            string ClassName = ConfigurationManager.AppSettings["Player1"];
            string Name = ConfigurationManager.AppSettings["Player1Name"];
            //***************************************************************
            Assembly asm = Assembly.GetExecutingAssembly();
            object[] ObjArray = new object[1];
            ObjArray[0] = Name;
            player1 = (Player)asm.CreateInstance("DecorationClass." + ClassName, true, BindingFlags.Default, null, ObjArray, null, null);
        }
    }
}

从注释的下面那行开始就是

现在才发现object是所有类的基类是多么的重要。。。

这里面的传参是通过一个一个object数组进行传递的,也就是ObjArray,所有的类型都可以,但是顺序一定要按照构造函数的顺序来存!

你可能感兴趣的:(C#相关)