结构如下:

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

10-08 05:04