在反射中寻找私密领域?
时间:2020-03-06 14:23:03 来源:igfitidea点击:
鉴于这个班
class Foo { // Want to find _bar with reflection [SomeAttribute] private string _bar; public string BigBar { get { return this._bar; } } }
我想找到要用属性标记的私人物品_bar。那可能吗?
我在寻找属性的属性中完成了此操作,但从未使用私有成员字段。
我需要设置哪些绑定标志才能获取私有字段?
解决方案
是的,但是我们将需要设置Binding标志以搜索私有字段(如果我们在类实例之外寻找成员)。
我们将需要的绑定标志是:System.Reflection.BindingFlags.NonPublic
typeof(MyType).GetField("fieldName", BindingFlags.NonPublic | BindingFlags.Instance)
我们可以像使用属性一样进行操作:
FieldInfo fi = typeof(Foo).GetField("_bar", BindingFlags.NonPublic | BindingFlags.Instance); if (fi.GetCustomAttributes(typeof(SomeAttribute)) != null) ...
使用BindingFlags.NonPublic
和BindingFlags.Instance
标志
FieldInfo[] fields = myType.GetFields( BindingFlags.NonPublic | BindingFlags.Instance);
在考虑私有成员时,需要注意的一件事是,如果应用程序以中等信任度运行(例如,当我们在共享托管环境中运行时),它将找不到它们-BindingFlags .NonPublic选项将被忽略。