BindingFlags 枚举用途:Type的类方法中,用于筛选成员。

type.InvokeMember方法中

type.GetConstructor 方法中

type.GetFiles方法中

type.GetMethod方法中

type.GetNestedType方法中

type.GetMember方法中

[Flag]
public enum BindingFlags
{
Default = 0,
IgnoreCase = 1,
DeclaredOnly = 2,
Instance = 4,
static = 8,
Public = 16,
NonPublic = 32,
FlattenHierarchy = 64,
InvokeMethod = 256,
CreateInstance = 512,
GetField = 1024,
SetField = 2048,
GetProperty = 4096,
SetProperty = 8192,
PutDispProperty = 16384,
PutRefDispProperty = 32768,
ExactBinding = 65536,
SuppressChangeType = 131072,
OptionalParamBinding = 262144,
IgnoreReturn = 16777216,
DoNotWrapExceptions = 33554432
}

Default:
IgnoreCase:表示忽略 name 的大小写。
DeclaredOnly:仅搜索在 Type 上声明的成员,而不搜索被继承的成员。
Instance:获取实例成员,不包括 virtual、static 成员,要和Public或者NonPublic一起使用,单个无法获取内容。
Static:获取静态成员,要和Public或者NonPublic一起使用,单个无法获取内容。
Public:获取公开成员
NonPublic:获取私有成员和受保护的成员
FlattenHierarchy :没明白
InvokeMethod:此标志会传递给 InvokeMember 方法以调用方法。
CreateInstance:此标志会传递给 InvokeMember 方法以调用构造函数。
GetField:指定应返回指定字段的值,此标志会传递给 InvokeMember 方法以获取字段值。
SetField:指定应设置指定字段的值。 此标志会传递给 InvokeMember 方法以设置字段值。
GetProperty:指定应返回指定属性的值此标志会传递给 InvokeMember 方法以调用属性 getter。
setProperty:指定应设置指定属性的值。 对于 COM 属性,指定此绑定标志等效于指定 PutDispProperty 和 PutRefDispProperty。

---------------------------------------------------接下来下面的部分就不是那么常用的了。

这些标记用于为 InvokeMember 方法提供参数,但是仅在调用一个 COM 组件的时候才应该使用:
PutDispProperty:不知道咋用
PutRefDispProperty:不知道咋用
ExactBinding :不知道咋用
SuppressChangeType:未实现
OptionalParamBinding :不知道咋用
IgnoreReturn :在 COM 互操作中用于指定可以忽略成员的返回值。
DoNotWrapExceptions:未知\ 反射调用方法时如果出现了异常,通常反射会用 TargetInvocationException 包装这个异常。 此标记用于禁止把异常包装到 TargetInvocationException 中。
下列示例使用所有反射 *Info 类和 BindingFlags 来列出指定类的全体成员(构造函数、字段、属性、事件和方法),并将成员区分为静态和实例类别 。

// This program lists all the members of the
// System.IO.BufferedStream class.
using System;
using System.IO;
using System.Reflection; class ListMembers
{
public static void Main()
{
// Specifies the class.
Type t = typeof(System.IO.BufferedStream);
Console.WriteLine("Listing all the members (public and non public) of the {0} type", t); // Lists static fields first.
FieldInfo[] fi = t.GetFields(BindingFlags.Static |
BindingFlags.NonPublic | BindingFlags.Public);
Console.WriteLine("// Static Fields");
PrintMembers(fi); // Static properties.
PropertyInfo[] pi = t.GetProperties(BindingFlags.Static |
BindingFlags.NonPublic | BindingFlags.Public);
Console.WriteLine("// Static Properties");
PrintMembers(pi); // Static events.
EventInfo[] ei = t.GetEvents(BindingFlags.Static |
BindingFlags.NonPublic | BindingFlags.Public);
Console.WriteLine("// Static Events");
PrintMembers(ei); // Static methods.
MethodInfo[] mi = t.GetMethods (BindingFlags.Static |
BindingFlags.NonPublic | BindingFlags.Public);
Console.WriteLine("// Static Methods");
PrintMembers(mi); // Constructors.
ConstructorInfo[] ci = t.GetConstructors(BindingFlags.Instance |
BindingFlags.NonPublic | BindingFlags.Public);
Console.WriteLine("// Constructors");
PrintMembers(ci); // Instance fields.
fi = t.GetFields(BindingFlags.Instance | BindingFlags.NonPublic |
BindingFlags.Public);
Console.WriteLine("// Instance Fields");
PrintMembers(fi); // Instance properites.
pi = t.GetProperties(BindingFlags.Instance | BindingFlags.NonPublic |
BindingFlags.Public);
Console.WriteLine ("// Instance Properties");
PrintMembers(pi); // Instance events.
ei = t.GetEvents(BindingFlags.Instance | BindingFlags.NonPublic |
BindingFlags.Public);
Console.WriteLine("// Instance Events");
PrintMembers(ei); // Instance methods.
mi = t.GetMethods(BindingFlags.Instance | BindingFlags.NonPublic
| BindingFlags.Public);
Console.WriteLine("// Instance Methods");
PrintMembers(mi); Console.WriteLine("\r\nPress ENTER to exit.");
Console.Read();
} public static void PrintMembers (MemberInfo [] ms)
{
foreach (MemberInfo m in ms)
{
Console.WriteLine ("{0}{1}", " ", m);
}
Console.WriteLine();
}
}

【C#反射】BindingFlags 枚举的更多相关文章

  1. C# 利用反射将枚举绑定到下拉框

    前言:反射(Reflection)是.NET提供给开发者的一个强大工具,尽管作为.NET框架的使用者,很多时候不会用到反射.但在一些情况下,尤其是在开发一些基础框架或公共类库时,使用反射会使系统架构更 ...

  2. C#通过反射进行枚举描述相关操作

    C#可以通过反射,来获取枚举的描述信息或通过描述信息获取到指定类型的枚举 /// <summary> /// 获取枚举描述 /// </summary> /// <par ...

  3. BindingFlags 枚举

    https://msdn.microsoft.com/zh-cn/library/cexkb29a 官方解释: 指定控制绑定和由反射执行的成员和类型搜索方法的标志. 此枚举有一个 FlagsAttri ...

  4. Java : java基础(6) 反射与枚举

    类需要经过 加载, 连接, 初始化三个步骤来进行初始化. 加载是把class文件读入内存创建一个class对象, 连接分为三步,第一步是验证是否是正确的结构, 第二步是准备, 为类的静态成员分配内存, ...

  5. (转)C#反射使用时注意BindingFlags的用法

    c#反射查找方法时,默认只能查到public方法.如果想要查找private方法,需要设定BindingFlags. 即: BindingFlags.Public|BindingFlags.Insta ...

  6. 利用注解和反射,将Bean枚举字段的值填入相应的字段中,并转化为fastjson返回前台

    需求:需要将枚举类型的字段例如enable(是否启用)转化为enable:1,enableName:是.这种形式返回给前台. 思路:在bean字段上加上枚举类型的注解,通过字段的值和枚举类反射获取枚举 ...

  7. .NET面试题系列[6] - 反射

    反射 - 定义,实例与优化 在面试中,通常会考察反射的定义(操作元数据),可以用反射做什么(获得程序集及其各个部件),反射有什么使用场景(ORM,序列化,反序列化,值类型比较等).如果答得好,还可能会 ...

  8. .Net 中的反射(序章) - Part.1

    引言 反射是.Net提供给我们的一件强力武器,尽管大多数情况下我们不常用到反射,尽管我们可能也不需要精通它,但对反射的使用作以初步了解在日后的开发中或许会有所帮助. 反射是一个庞大的话题,牵扯到的知识 ...

  9. C#反射技术概念作用和要点

    反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...

随机推荐

  1. 虚拟化架构与Centos7系统部署

    1.什么是虚拟化(Virtualization) 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可 ...

  2. gorm中的更新

    保存所有字段 Save 会保存所有的字段,即使字段是零值. db.First(&user, 5)user.Name = sql.NullString{"王八", true} ...

  3. golang汇总gomodules的初始化与改变模块的依赖关系

    1. gomodules的初始化 2. 改变模块的依赖关系

  4. Python小练习-购物商城(一部分代码,基于python2.7.5)

    新手写作,用来练习与提高python编写.思考能力,有错误的地方请指正,谢谢! 第一次写博客,课题是一位大神的博客,本着练习的目的,就自己重写了一遍,有很多不足的地方,希望借博客记录下自己的成长:  ...

  5. 使用du与df命令查看磁盘容量不一致

    在Linux系统的ECS实例中,执行du与df命令查看磁盘容量,出现不一致的现象 执行df -h命令查看文件系统的使用率,可以看到500G 执行du / -sh 命令只使用250G 执行du和df命令 ...

  6. linux关闭透明大页

    echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transpare ...

  7. C++ POD 类型

    POD 是 C++ 中一个比较重要的概念,POD 是英文 Plain Old Data 的缩写(通俗讲就是类或结构体通过二进制拷贝后还能保持其数据不变),用来描述一个类型(包括 class.union ...

  8. 「 MySQL高级篇 」MySQL索引原理,设计原则

    大家好,我是melo,一名大二后台练习生,大年初三,我又来充当反内卷第一人了!!! 专栏引言 MySQL,一个熟悉又陌生的名词,早在学习Javaweb的时候,我们就用到了MySQL数据库,在那个阶段, ...

  9. Visual Studio 2022 下载链接及激活密钥

    Visual Studio 2022 下载链接:https://visualstudio.microsoft.com/zh-hans/vs/ 激活码: 专业版: TD244-P4NB7-YQ6XK-Y ...

  10. HowToDoInJava 其它教程 1 &#183; 翻译完成

    原文:HowToDoInJava 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. ApacheCN 学习资源 目录 Maven 教程 如何在 ...