c# - 为什么我需要指定多种类型的绑定(bind)标志才能获取单个字段的信息?

标签 c# reflection

当尝试使用反射获取字段信息时,我需要使用代码

SomeObject.GetType().GetField(
    "FieldName",
    System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)

特别是,我必须同时指定 BindingFlags.NonPublic BindingFlags.Instance。如果我只指定一个,我会得到一个 null 返回值。

如果我只查看单个字段,为什么需要指定多个绑定(bind)标志类型?

最佳答案

这些标志起到某种过滤器的作用。

如果省略 BindingFlags.NonPublicGetField() 函数不会查找 privateinternal protected 字段。

而且您必须指定 BindingFlags.InstanceBindingFlags.Static 来定义您要查找的内容。

参见 http://msdn.microsoft.com/en-us/library/6ztex2dc.aspx :

You must specify either BindingFlags.Instance or BindingFlags.Static in order to get a return.

...

Specify BindingFlags.NonPublic to include non-public fields (that is, private, internal, and protected fields) in the search. Only protected and internal fields on base classes are returned; private fields on base classes are not returned.

关于c# - 为什么我需要指定多种类型的绑定(bind)标志才能获取单个字段的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24889416/

相关文章:

C# - 制作一个接受任何类型的通用 foreach 方法?

c# - 创建可在运行时计算的表达式

c# - 微软对ReaderWriterLockSlim.IsReadLockHeld/IsWriteLockHeld的评论及其后果

Java 与 .NET 性能

c# - 如何在使用反射加载的程序集中使用 CaSTLe.Windsor

java - 获取 Scala 类型的 Java 反射表示

.net - ResolveEventArgs.RequestingAssembly 为 Null

c# - 找不到初始化文件 gs_init.ps

c# - 使用 Autofac 拦截 .NET Core 2.0 Web API Controller

java - 通过Java Reflection/Scala Reflection调用实例方法: Which one is faster?