C# 通过反射动态创建对象的方法
1、var val = (类型T)Assembly.Load("属性-》程序集名称").CreateInstance("属性-》命名空间.类型T名称", false); 具体参考Assembly类中的CreateInstance方法,重载方法中args可传入带参构造函数的参数,数组内顺序与类型必须与构造函数顺序及类型一致
2、var val = (类型T)Activator.CreateInstance(typeof(类型),params object[] args ); 具体参考Activator类中的CreateInstance方法,重载方法中args可传入带参构造函数的参数,数组内顺序与类型必须与构造函数顺序及类型一致
从dll库中调用时,应用如下
Assembly assembly = Assembly.LoadFrom(@"e:\AutoFormFirstForm.dll");//dll全路径
Type type = assembly.GetType("FirstForm.Form1");//类名称(全名)即:命名空间+类名称
object obj = Activator.CreateInstance(type);
Form formToShow = (Form)obj;
1)首先是通过Assembly.LoadFrom()来加载dll文件; 2)再通过GetType()来获得要创建的Form类对象的类型。注意,在GetType()方法的参数为类型的名字,为string类型,同时该名字应为类型的FullName,即:命名空间名.类名; 3)然后通过Activator.CreateInstance()方法创建该类型对象,返回object对象。 4)再将该对象强制转换为Form类型。实际应用中,一般是扩展子类强转为父类,子类通过重写父类的方法来实现功能 ,或转为接口类型,类型通过显示实现接口来实现功能 5)最后调用即可。