一、反射的用途
- 动态获取类或对象的信息,具体包括了
①动态获取加载程序集(Assmebly)
②动态获取类型信息(如类、接口 等) - Type对象
③动态获取类型的成员信息(如方法,字段,属性等); - 动态创建类型实例(new),以及调用和访问这些实例成员;
二、举例
题目:写一段代码动态加载一个程序集,从程序集获取类型T,从T获取名为 Create的静态方法,执行该静态方法
①.新建一个程序集
②创建class T, 添加Create静态方法
③动态加载
class Program
{
static void Main(string[] args)
{
//根据路径获取程序集
Assembly ass = Assembly.LoadFrom(@"D:\Project\C#\TestDLL\bin\Debug\TestDLL.dll");
//获取Type对象
Type type_T = ass.GetType("TestDLL.T");
//生成T的实例
object t = Activator.CreateInstance(type_T);
//获取所有的公开静态方法
MethodInfo[] methods = type_T.GetMethods(BindingFlags.Public | BindingFlags.Static);
for(int i = 0; i < methods.Length; i ++)
{
if (methods[i].Name == "Create")
{ //调用Create静态方法
methods[i].Invoke(t, null);
//Invoke(实例对象,参数列表)
}
}
//或者直接:
//MethodInfo method = type_T.GetMethod("Create");
//method.Invoke(t, null);
Console.ReadLine();
}
}
运行结果: