`
java-mans
  • 浏览: 11434901 次
文章分类
社区版块
存档分类
最新评论

C#反射

 
阅读更多

什么是反射?
反射提供了封装程序集、模块和类型的对象(Type类型)

可以使用反射动态的创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后,可以调用类型的方法或访问其字段和属性

反射的用途

需要访问程序元数据的属性
检查和实例化程序集中的类型
在运行时构建新类型
执行后期绑定,访问在运行时创建的类型的方法

命名空间:System.Reflection

Type类

Type代表类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开发或封闭构造的泛型类型
Type是System.Reflection功能的根,是访问元数据的主要方式

可以使用Type的成员获取关于类型声明的信息,如构造函数、方法、字段、属性和类的事件

Type的实例可以表示一下任何类型

值类型
数组
接口
指针
枚举
构造泛型类型和泛型类型定义
构造泛型类型、泛型乐讯定义和泛型方法定义的类型实参和类型形参

Demo:

mscorlib.dll是.NET中一个最主要的程序集之一,现在我们来查看该程序集中的所有类型。

Assembly a = Assembly.Load("mscorlib.dll");
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = a.FullName; //获取程序集名称
Label1.Text += "<br>" + a.GetType().ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
Type[] T = a.GetTypes();
int count = a.GetTypes().Length;
for (int i = 0; i < count; i++)
{
Response.Write(T[i].FullName + "<br>");
}

}

Users 是ClassLibrary.dll程序集中的一个类,并且在该类中存在一个Say方法,下面我来看如何动态调用该程序集中的Say方法。

protected void Button2_Click(object sender, EventArgs e)
{
Assembly ab = Assembly.LoadFrom(@"D:/ClassLibrary.dll");
//获取程序集类型
Type newObject = ab.GetType("ClassLibrary.Users");
//创建动态加载程序集的实例
object myObject = Activator.CreateInstance(newObject);
//获取动态程序集的方法
MethodInfo info=newObject.GetMethod("Say");
//执行该方法
info.Invoke(myObject, null);
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics