关于反射机制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}下面是具体调用方法:
1
public void test1()
2 {
3 System.Reflection.Assembly ass;
4 Type type ;
5 object obj;
6 try
7 {
8 ass = System.Reflection.Assembly.LoadFile(@"d:/TestReflect.dll");
9 type = ass.GetType("Webtest.ReflectTest");//必须使用名称空间+类名称
10 System.Reflection.MethodInfo method = type.GetMethod("WriteString");//方法的名称
11 obj = ass.CreateInstance("Webtest.ReflectTest");//必须使用名称空间+类名称
12 string s = (string)method.Invoke(obj,new string[]{"jianglijun"}); //实例方法的调用
13
14 Response.Write(s+"<br>");
15 method = type.GetMethod("WriteName");//方法的名称
16 s = (string)method.Invoke(null,new string[]{"jianglijun"}); //静态方法的调用
17 Response.Write(s+"<br>");
18
19 method = type.GetMethod("WriteNoPara");//无参数的实例方法
20 s = (string)method.Invoke(obj,null);
21 Response.Write(s+"<br>");
22 method = null;
23 }
24 catch(Exception ex)
25 {
26 Response.Write(ex+"<br>");
27 }
28 finally
29 {
30 ass = null;
31 type = null;
32 obj = null;
33 }
34 }
本文详细介绍了C#中的反射机制及其应用场景,通过一个具体的实例演示了如何使用反射动态创建对象并调用其方法,包括实例方法、静态方法及无参数方法。
1639

被折叠的 条评论
为什么被折叠?



