假设我有以下示例类:
public class Base
{
public int Value { get; set; }
}
public class Derived : Base
{
public new string Value { get; set; }
public bool IsBaseValueSet()
{
return base.Value != 0;
}
public void SetBaseValue(int value)
{
base.Value = value;
}
}
该属性Value
被隐藏Derived
并替换为 type 的属性string
。现在如果这样做:
var properties = typeof(Derived).GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
我将只获得一个属性,即Value
in the class Derived
。此外,如果我检查类字段:
var fields = typeof(Derived).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
我仍然只会得到一个支持领域,那就是Derived
班级里的那个。为什么呢?该类Derived
仍然可以访问base.Value
,对其具有逻辑等,但该类似乎缺少它的值。有没有办法通过反射来访问它?Derived
通过类型反映时这个值没有出现的原因是什么?(注意:我意识到我可以反思Base
并获得价值,但我想问为什么当我们反思时该价值没有出现,Derived
即使它明显存在并且可以被操纵)。
编辑:如果两个Value
成员都被声明为字段而不是属性,则行为是“正常的”,反射将得到它们。