使用 .NET 的反射时,通常会要求传入一个 BindingFlags 参数用于指定反射查找的范围。
tips:C#反射查找方法时默认只查找public方法,如果需要查找其他,需要设置 BindingFlags
设置 BindingFlags 时
BindingFlags.Instance和BindingFlags.Static二者至少有一项,否则也差不到方法
一、枚举值
Default: 默认值
查找:用于反射查找类型成员
IgnoreCase:查找时忽视大小写
DeclaredOnly:查找在特定类型中声明的成员,不包括继承来的成员
Instance:仅查找实例
Static:仅查找静态成员
Public:仅查找公共成员
NonPublic:仅查找非公共成员
FlattenHierarchy:会查找继承树上得到的静态成员,仅包括public和protect静态成员,不包括private静态成员,也不包括嵌套类型
调用:用于为InvokeMember方法提供参数,告知应如何通过反射调用一个方法
InvokeMethod:调用方法
CreateInstance:创建实例
GetField:获取字段的值
SetField:设置字段的值
GetProperty:获取属性的值
SetProperty :设置属性的值
为InvokeMember方法提供参数
PutDispProperty :
PutRefDispProperty :
ExactBinding :
SuppressChangeType :
OptionalParamBinding :
杂项
IgnoreReturn :忽略返回值(在com组件的互操作中使用)
DoNotWrapExceptions :反射调用方法时如果出现异常,禁止把异常包装到TargetInvocationException中
二、常见组合
获取所有成员:
BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance
获取共有实例成员:
BindingFlags.Public | BindingFlags.Instance
详解 .NET 反射中的 BindingFlags 以及常用的 BindingFlags 使用方式 - 腾讯云开发者社区-腾讯云 (tencent.com)