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