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)最后调用即可。

原文地址:https://www.cnblogs.com/-hwh/p/13964318.html