[英]C# reflection base class trouble
我想通過字段名稱獲取子類中基類字段的值:
class A
{
protected static double? x;
}
class B : A
{
B()
: base()
{
x = 13F;
}
void test()
{
double? s = this.GetType().
GetField("x", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null) as double?;
}
}
為什么在我調用test()方法時出現TargetException?
double? s = GetType()
.GetField("x", BindingFlags.FlattenHierarchy | BindingFlags.NonPublic | BindingFlags.Static)
.GetValue(null) as double?;
從System.Reflection.BindingFlags
:
FlattenHierarchy:指定應返回層次結構中的公共和受保護的靜態成員。 繼承的類中的私有靜態成員不會返回。 靜態成員包括字段,方法,事件和屬性。 不返回嵌套類型。
我假設這只是一個玩具示例,可以測試基本類型中的靜態成員? 否則,在這種情況下使用反射似乎有點奇怪: protected
成員對子類可見。 您可以這樣做:
double? s = x;
添加BindingFlags.FlattenHierarchy
:
GetField("x", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy).GetValue(null) as double?;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.