随便写点代码,发现了这个问题。。。
因为一开始使用的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,所有的类型都可以,但是顺序一定要按照构造函数的顺序来存!