“反射”在C#编程中的应用

关于反射机制MSDN中是这样说明的:反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。

其主要的作用是:

需要访问程序元数据的属性。(元数据被定义为:在程序中不是被加工的对象,而是通过其值的改变来改变程序的行为的数据。)

检查和实例化程序集中的类型。

在运行时构建新类型。使用 System.Reflection.Emit 中的类。

执行后期绑定,访问在运行时创建的类型的方法。请参见主题动态加载和使用类型

封装是面向对象编程中常用的方法,具体针对反射的作用来说,动态创建类型并绑定到现有对象是最重要的应用。

下面通过一个具体实例对其用法进行说明(实例代码参照http://www.cnblogs.com/fineboy/archive/2006/10/10/525348.html博文)

(假如DLL的文件名是TestReflect.dll)

首先创建一个动态链接库

1using System;
2
3namespace Webtest
4{
5 /** <summary>
6 /// ReflectTest 的摘要说明。
7 /// </summary>
8 public class ReflectTest
9 {
10 public ReflectTest()
11 {}
12
13 public string WriteString(string s)
14 {
15 return "欢迎您," + s;
16 }
17
18 /** <summary>
19 /// dsajkjflasjdfalksdjfaskfd
20 /// </summary>
21 /// <param name="s"></param>
22 /// <returns></returns>
23 public static string WriteName(string s)
24 {
25 return "欢迎您光临," + s;
26 }
27
28 public string WriteNoPara()
29 {
30 return "您使用的是无参数方法";
31 }
32 }
33}

下面是具体调用方法:

1publicvoidtest1()
2{
3System.Reflection.Assemblyass;
4Typetype;
5objectobj;
6try
7{
8ass=System.Reflection.Assembly.LoadFile(@"d:\TestReflect.dll");
9type=ass.GetType("Webtest.ReflectTest");//必须使用名称空间+类名称
10System.Reflection.MethodInfomethod=type.GetMethod("WriteString");//方法的名称
11obj=ass.CreateInstance("Webtest.ReflectTest");//必须使用名称空间+类名称
12strings=(string)method.Invoke(obj,newstring[]{"jianglijun"});//实例方法的调用
13
14Response.Write(s+"<br>");
15method=type.GetMethod("WriteName");//方法的名称
16s=(string)method.Invoke(null,newstring[]{"jianglijun"});//静态方法的调用
17Response.Write(s+"<br>");
18
19method=type.GetMethod("WriteNoPara");//无参数的实例方法
20s=(string)method.Invoke(obj,null);
21Response.Write(s+"<br>");
22method=null;
23}

24catch(Exceptionex)
25{
26Response.Write(ex+"<br>");
27}

28finally
29{
30ass=null;
31type=null;
32obj=null;
33}

34}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值