程序中的阿呆

经常做做梦,写写工作无关代码
  首页  :: 新随笔  :: 订阅 订阅  :: 管理

.NET 的Refletion的初步了解

Posted on 2005-12-07 22:39  MicroDream  阅读(1660)  评论(2)    收藏  举报

使用过Delphi的知道,RTTI是Delphi的重要特殊,最简单的例子,就是Delphi的属性查看器动态获得对象的属性等。
 RTTI主要用途就是用于在运行型提供对象的类型信息,应该说,基于RTTI的机制是RAD IDE重要机制之一,RAD开发工具可以取出某个组件的属性与事件显示在属性框上等等。

Reflection开始就Microsoft的解释感觉应该是RTTI,只是没空在.NET方面多看一点(我只是初学者)。在.NET Framwork中,只要语言支持.NET,就可以有RTTI的机制来支持动态应用了。不知道Delphi .NET是否还需要自已的RTTI机制实现了?还是封装一下呢?这个且不管了。

Reflection是经过Type对象来操作,分成两个部分: 一部分是提供Type本身的信息,比如public,Sealed, Interface等等
另外一部分就是Type内的成员信息,比如这个类的属性、方法、事件、数据成员等。取回的成员信息封装成MemberInfo,一般我们取到的都是MemberInfo的子类,有 FieldInfo, PropertyInfo, EventInfo MethodInfo等,下面的例子就有使用MethodInfo的情况。

下面举一个看到的例子:

Type t = listBox1.GetType(); //这就是第一部分,取得Type本身的信息
object 0 = t.GetProperty("Item").GetValue(listBox1, null); //这应该是第二部分,取得成员信息

//利用动态调用的案例
MethodInfo mdInfo = t.GetMethod("Clear");
mdInfo.Invoke(o, 
null); //等于调用listBox1.clear


在MSDN内可以用Reflection查到Reflection的相关函数和更多的信息。