您的位置:首页 > 其它

反射手册笔记 2.程序集,对象和类型

2007-08-31 11:45 316 查看
第一部分:程序集(System.Reflection.Assembly)

1.获取Assembly对象

方法1:调用Assembly的以下4个静态方法Get...()之一:

GetAssembly(Type t)
GetCallingAssembly() ——返回调用当前方法的方法所在的程序集

GetExecutingAssembly() ——返回当前执行代码所在的程序集
GetEntryAssembly() ——返回当前AppDomain中包含Main方法的程序集

方法2:调用Assembly的以下3个静态方法Load(...)之一:括号中的...表示有若干种重载

Load(...)
LoadWithPartialName(...)
LoadFrom(...)

方法3:通过Type对象的Assebmly属性或者GetAssembly()方法,来获取表示此类型的程序集Assembly对象——等价于前面的Assembly.GetAssembly(Type t)静态方法

方法4:AppDomain.GetAssemblies() ——返回在AppDomain中加载的程序集。

2.获取到Assembly对象后,可以使用其提供的属性和方法,得到关于程序集的所有信息。见书上P19-20,这里不再抄录。

第二部分:类型(Type):包括 类/接口/数组/值类型/枚举/指针

1.获取Type对象

方法1:GetType()方法,有两个:

Object类中的方法,所以所有类都会继承这个方法,获取自身的Type对象:

Type myType = myObj.GetType(); ——实例方法

同时,Type类存在一个静态方法GetType,获取没有实例化的类的Type对象:

Type myType = Type.GetType("System.Double"); ——静态方法,这里System.Double以字符串形式传递,区分大小写

注意:VB.NET提供GetType运算符,获取对象的Type类型——C#下相应为typeof()方法:

Type myType = typeof(System.Double);

Dim myType as Type = GetType(System.Double); ——这里,System.Double不需要加引号,作为类来传递。

方法2:GetInstances()方法,获取对象实现或者继承的所有接口类型,返回一个Type数组:

Type[] myInterfaces = myObj.GetInstances();

方法3:Reflection.Module.GetType()方法:

Type myType = myModule.GetType("ClassName");

一个Module中可能有多个Class,获取模块中所有类型:Module.GetTypes();

查找Module中某一Class类型:Module.FindTypes();

2.获取到Type对象后,就可以访问类成员了,见第三部分。

第三部分:类成员



Type.GetXXX()获取相应的XXX,XXX指的是Method或Methods,Members,Propertiy等等。

1.MemberInfo

该类是一个抽象基类,成员类型都要从此派生。它提供了一些公共的属性:Name(成员名称);MemberType(成员类型)等等

通过Type的GetMembers()方法,配合BindingFlags枚举,可以检索成员:

myType.GetMembers(BindingFlags.Static | BindingFlags.Public);

或者

myType.GetMembers(BindingFlags.Instance | BindingFlags.NonPublic);

注意,BindingFlags.Instance与BindingFlags.Static不共存, BindingFlags.Public与BindingFlags.NonPublic不共存,否则,不会返回任何值——倒不是编译期/运行期报错。

所有的GetXXX()都可以这么用:GetFields, GetMethods....

2.FieldInfo

该类有两个方法很有用:GetValue()和SetValue():用于检索/修改字段值

3.PropertyInfo

该类也有GetValue()和SetValue()方法。还有CanRead和CanWrite属性

4.MethodBase

这是一个抽象类,是MethodInfo和ConstructorInfo的基类,声明了方法和构造函数的一些公共属性和方法。

5.MethodInfo

多了一个ReturnType属性

6.ConstructorInfo

当类中没有显示定义构造函数时,反射得到的元数据是默认构造函数。

7.EventInfo

这个类的属性有IsMulticase——是否委托链;EventHandlerType——相应委托的Type

方法有成对的GetAddMethod/GetRemoveMethod,以及GetRaiseMethod——返回激活事件时要调用的方法

8.ParemeterInfo

直接派生于System.Object

通过在MethodInfo对象或者ConstructorInfo对象上调用GetParameters()方法获取,不需要任何参数,返回一个ParemeterInfo数组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: