Reflection 反射需要引用 using System.Reflection; 命名空间。
通过 Assembly 类的 Load( ); 加载指定的 程序集
Assembly 是不能被实例化, 所以能通过调用静态方法Load();加载指定程序集。
通过GetType()RefLiuyl中GetCond的类型
1
2
3
|
Assembly assembly = Assembly.Load( "RefLiuyl" );
//获取类型,参数(名称空间+类) Type type = assembly.GetType( "RefLiuyl.GetCon" );
|
还有一种当使用泛型的时候 GetName<T>() 。 直接 获取类型Type type = typeof(T);
我们来看看部分内部Load原型静态方法:
//Assembly内部Load原型 --部分 public class Assembly { //Load静态重载原型 public static Assembly Load(AssemblyName assemblyRef); public static Assembly Load(string assemblyString); }
这里的 AssemblyName 其实就是取 程序集
AssemblyName classlibrary = new AssemblyName("ClassLibrary"); Assembly assembly = Assembly.Load(classlibrary);
Assembly 还可以通过路径来加载程序集
Assembly assem = Assembly.LoadFrom("path");
//Assembly内部Load原型 --部分 public class Assembly { //Load静态重载原型 public static Assembly LoadFrom(string path); }
二。构造类型的实例
1
2
3
|
Assembly assembly = Assembly.Load( "RefLiuyl" );
//获取类型,参数(名称空间+类) Type type = assembly.GetType( "RefLiuyl.GetCon" );<br>获取到类型后,我们需要实例化它。<br><br>通过System.Activator的CreateInstance方法来实例化它。
|
AssemblyName classlibrary = new AssemblyName("ClassLibrary"); // Assembly assembly = Assembly.Load(classlibrary); Assembly assembly = Assembly.Load("ClassLibrary"); //通过GetType()获取类型 //获取类型,参数(名称空间+类) Type type = assembly.GetType("ClassLibrary.Student"); //创建该对象的实例,object类型,参数(名称空间+类) object instance = assembly.CreateInstance("ClassLibrary.Student"); //或者直接使用type object instance1 = Activator.CreateInstance(type); //当使用泛型 Type type = typeof(T); T destObj = Activator.CreateInstance<T>();
Activator.CreateInstance(); 返回的就是 类实例
GetProperties(); 返回程序集类型中的所有属性
//通过GetType()获取类型 //获取类型,参数(名称空间+类) Type type = assembly.GetType("ClassLibrary.Student"); foreach (PropertyInfo prop in type.GetProperties()) { string namses= prop.Name; }
返回的就是 程序集中 实例类的属性字段。