【发布时间】:2013-05-06 07:47:19
【问题描述】:
假设我有以下示例类:
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 中,并替换为string 类型的属性。现在如果这样做:
var properties = typeof(Derived).GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
我将只获得一个属性,即 Derived 类中的 Value。此外,如果我检查类字段:
var fields = typeof(Derived).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
我仍然只会得到一个支持字段,即Derived 类中的那个。为什么呢? Derived 类仍然可以访问 base.Value,对其有逻辑等,但该类似乎缺少它的值。有没有办法通过反射来访问它?通过Derived 类型反映时,这个值没有显示的原因是什么? (注意:我意识到我可以通过Base 反映并获得价值,但我想问为什么当我们通过Derived 反映时该价值没有出现,即使它明显存在并且可以被操纵)。
编辑:如果两个 Value 成员都被声明为字段而不是属性,则行为是“正常的”,反射将得到它们。
【问题讨论】:
标签: c# reflection properties