反射的两个过滤枚举

 

一、BindingFlags(绑定约束):

指定控制绑定和由反射执行的成员和类型搜索方法的标志。

其枚举按功能可分为如下3

1.         可访问性标识

调用TypeGetMembersGeNestedTypesGetFieldsGetConstructorsGetMethodsGetProperties或者GetEvents来查询一个类型的成员时,可以使用 BindingFlags 实参指定搜索符号。

如果调用无此参数的重载版本那么 BindingFlags 取默认值Public|Instance|Static ,即只返回公共成员。

Default

不指定绑定标志。

IgnoreCase

不区分大小写搜索指定字符串匹配的成员

IgnoreReturn

COM 互操作中用于指定可以忽略成员的返回值。

FattenHierarchy

返回基类型定义的公共静态成员和受保护的静态成员。(静态成员包括字段、方法、事件和属性。不返回嵌套类型)

DeclaredOnly

只返回被反射的那个类型的成员,忽略继承的成员

Instance

返回实例成员

Static

返回静态成员

Public

返回公共成员

NonPublic

返回非公共成员

 

2.         绑定参数标识

ExactBinding

绑定器查找其形参类型与传递的实参类型必须完全一致的成员。

如果调用方提供一个非空 Binder 对象,则“反射”将引发异常,因为这意味着调用方正在提供的 BindToXXX实现将选取适当的方法。

OptionalParamBinding

返回其参数计数与提供参数的数目匹配的成员集。如果一些成员的参数具有默认值,或者一些方法要获取数量可变的实参,这个参数就有用了。只有 Type InvokeMember 方法才支持这个标志。

 

3.         操作标识

InvokeMethod

指定要调用一个方法。它不能是构造函数或类型初始值设定项。

CreateInstance

指定创建一个新对象并调用其构造器

GetField

指定应返回指定字段的值

SetField

指定应设置指定字段的值

GetProperty

指定应调用属性的 get 访问器方法

SetProperty

指定应调用属性的 set 访问器方法

   对于 COM 属性,指定此绑定标志与指定 PutDispProperty PutRefDispProperty 是等效的,如果 COM 属性同时具有 PROPPUT PROPPUTREF,而且需要区分调用哪一个,则使用对应的 PutDispProperty PutRefDispProperty

PutDispProperty

指定应调用 COM 对象的 PROPPUT 成员。PROPPUT 指定【使用值的属性】设置函数。

PutRefDispProperty

指定应调用 COM 对象的 PROPPUTREF 成员。PROPPUTREF 指定【使用引用】设置函数。

在“操作”标识中大多数标识都是互斥的,只可同时指定 GetField GetProperty标识,这时的 InvokeMember绑定行为是:先查找一个匹配的字段,如果没有找到匹配的字段,就查找一个匹配的属性。( SetField GetProperty 类似)

 

一、MemberTypes(成员类型)

{ConstructorEventFieldMethodPropertyTypeInfoCustomNestedTypeAll}

         调用 Type FindMembersGetMember 搜索成员时,需要传入 MemberTypes 标识,用于决定要查找的 MemberInfo 的成员类型,如限定为构造函数、事件、自定义成员类型等等。

 

 

        相关链接:

                           (9)程序集的加载和反射

 

 

posted on 2012-04-08 23:50  滴答的雨  阅读(1907)  评论(0编辑  收藏  举报