结构如下:
MyClass:SuperClass2
SuperClass2:SuperClass1
superClass2在Product.Web中,SuperClass1在.NET System.Web程序集中
我正在尝试将值强制放入SuperClass1的私有(private) bool 字段中。但是,不管我尝试什么,我都无法从反射(reflection)中得到返回。
我将以下代码与不同的BindingFlag组合一起使用,但到目前为止没有任何效果。 SuperClass1是一个抽象类。
((SuperClass1)this).GetType().GetFields(System.Reflection.BindingFlags.NonPublic);
注意:
当我使用GetProperties()时,我会得到一个不错的大列表,但是当我指定任何绑定(bind)标志时,即使有匹配的属性,我也一无所获。这是怎么回事?
另外,该字段未标记为内部
显然我会使用GetField(string name,BindingFlags),但我什至无法使GetFlags()正常工作。
更新:我已经尝试按照建议的方式添加BindingFlags.Instance,但是它不起作用(无论如何也是如此)。我得到2个来自SuperClass1继承的类的字段。与GetField(string name,Flags)一起使用时返回null
这是我试图获取该字段的基类的代码
public abstract class BaseValidator : Label, IValidator
{
private bool propertiesChecked;
...
}
最佳答案
您可以手动在继承链中向上移动以获取基本字段:
给定这些类:
class SuperClass1
{
private int myField;
}
class SuperClass2 : SuperClass1
{
}
class MyClass : SuperClass2
{
}
这应该工作:
var myObj = new MyClass();
var myField = typeof(MyClass).BaseType
.BaseType
.GetField("myField", BindingFlags.Instance | BindingFlags.NonPublic);
这样的答案中有一个更通用的解决方案:Not getting fields from GetType().GetFields with BindingFlag.Default