反射的两个过滤枚举
一、BindingFlags(绑定约束):
指定控制绑定和由反射执行的成员和类型搜索方法的标志。
其枚举按功能可分为如下3种
1. 可访问性标识
调用Type的GetMembers,GeNestedTypes,GetFields,GetConstructors,GetMethods,GetProperties或者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(成员类型)
{Constructor,Event,Field,Method,Property,TypeInfo,Custom,NestedType,All}
调用 Type 的 FindMembers,GetMember 搜索成员时,需要传入 MemberTypes 标识,用于决定要查找的 MemberInfo 的成员类型,如限定为构造函数、事件、自定义成员类型等等。
相关链接:
作者:滴答的雨
出处:http://www.cnblogs.com/heyuquan/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
欢迎园友讨论下自己的见解,及向我推荐更好的资料。
本文如对您有帮助,还请多帮 【推荐】 下此文。
谢谢!!! (*^_^*)
技术群:(339322839广西IT技术交流),欢迎你的加入