“反射”在C#编程中的应用
来源:互联网 发布:中国的权贵阶层 知乎 编辑:程序博客网 时间:2024/04/30 23:32
关于反射机制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}
下面是具体调用方法:
1public 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#编程中的应用
- c# 反射在ORM中的应用
- 反射在Java Swing编程中的应用
- 反射在Java Swing编程中的应用
- 反射在Java Swing编程中的应用
- C# 反射在工厂设计模式中的应用
- C#反射在实际应用中的事例代码
- 反射在Java中的应用
- 反射在android中的应用
- Attribute在.Net编程中的应用和C#类型转换
- 多线程在Visual C#网络编程中的应用
- 多线程在Visual C#网络编程中的应用
- 多线程在Visual C#网络编程中的应用(1)
- 多线程在Visual C#网络编程中的应用
- C#中的反射原理及应用
- C#中的反射原理及应用
- C#中的反射原理及应用
- C#中的反射原理及应用
- TagWorld上的图片的外链(已解决)
- 20100125 Lecture3 Snake Game
- CuteEditor6 破解 注册文件生成
- 读书随笔
- 直接选择排序
- “反射”在C#编程中的应用
- 晚会动员会
- 追忆流年
- VC++常用快捷键
- AVR学习札记之跑马灯程序
- 程序员四大忌 你该如何避免呢?(zoubeibei)
- Google請留步
- vse使用技巧
- Regen的等价实现