Reflection 反射需要引用 using System.Reflection; 命名空间。
通过 Assembly 类的 Load( ); 加载指定的 程序集
Assembly 是不能被实例化,
所以能通过调用静态方法Load();加载指定程序集。
通过GetType()RefLiuyl中GetCond的类型
?
1 2 3 |
|
还有一种当使用泛型的时候 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 |
|
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;
}
返回的就是 程序集中 实例类的属性字段。