簡體   English   中英

C# 反射 - 派生類型中的基類靜態字段

[英]C# Reflection - Base class static fields in Derived type

在 C# 中,當我反映派生類型時,為什么看不到基類的靜態字段?

我已經嘗試過type.GetFields(BindingFlags.Static)type.GetFields()

這就是它的工作原理。 static成員實際上是非面向對象的東西。 它們不是多態的,它們確實屬於它們的聲明類型,並且與繼承層次結構中的其他類型無關。 例如,在訪問派生類中的靜態成員之前,不需要運行基類的靜態初始化器。

除非指定BindingFlags.FlattenHierarchy ,否則不會返回基類的static成員:

type.GetFields(BindingFlags.Static 
             | BindingFlags.FlattenHierarchy
             | BindingFlags.Public)

因為它們屬於基類型,並且不被繼承。 向上移動到那種類型,你就會找到它們。

- 編輯

Mehrdad 有正確的答案,但只是為了完整性:

foreach(FieldInfo f in b.GetType().GetFields(
    BindingFlags.Static
    | BindingFlags.FlattenHierarchy
    | BindingFlags.Instance
    | BindingFlags.Public
    )){
    Console.WriteLine("found: " + f.Name);
}

將 BindingFlags.FlattenHierarchy 枚舉設置為 Static,這也將搜索靜態成員。 更多信息:http: //msdn.microsoft.com/en-us/library/system.reflection.bindingflags.aspx

你的類型就是你的類型——它不包括基本類型。 如果要搜索基類中的字段,則需要使用BindingFlags.FlattenHierarchy

您可能應該查看BindingFlags 文檔來完成所需的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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