簡體   English   中英

C#反射基類麻煩

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM