关于反射机制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}