• 反射的两个过滤枚举


     

    一、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)程序集的加载和反射

     

     

  • 相关阅读:
    [PyJs系列介绍]一、从commonjs和seajs说起
    [PyJs系列介绍]五、回顾及展望
    [PyJs系列介绍]三、编译与上线
    url decode problem
    [PyJs系列介绍]二、缘起和核心概念
    ControlJS介绍
    css,javascript的预加载
    [PyJs系列介绍]四、代理与插件
    webservice上传图片
    提高IIS7并发连接数
  • 原文地址:https://www.cnblogs.com/heyuquan/p/2438292.html
Copyright © 2020-2023  润新知