在C#中,当我反映派生类型时,为什么我看不到基类的静态字段?
我已经尝试了type.GetFields(BindingFlags.Static)
和type.GetFields()
。
答案 0 :(得分:20)
这是它的工作原理。 static
成员实际上是非面向对象的东西。它们不是多态的,它们实际上属于它们的声明类型,并且与继承层次结构中的其他类型无关。例如,在访问派生类中的静态成员之前,不需要运行基类的静态初始化程序。
static
,否则不会返回 BindingFlags.FlattenHierarchy
个基类成员:
type.GetFields(BindingFlags.Static
| BindingFlags.FlattenHierarchy
| BindingFlags.Public)
答案 1 :(得分:6)
因为它们属于基类型,并且不是继承的。向上移动到那个类型,你就会找到它们。
- 编辑
Mehrdad有正确的答案,但仅仅是为了完整性:
foreach(FieldInfo f in b.GetType().GetFields(
BindingFlags.Static
| BindingFlags.FlattenHierarchy
| BindingFlags.Instance
| BindingFlags.Public
)){
Console.WriteLine("found: " + f.Name);
}
答案 2 :(得分:5)
将BindingFlags.FlattenHierarchy枚举设置为Static,这也将搜索静态成员。更多信息: http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags.aspx
答案 3 :(得分:3)
您的类型只是您的类型 - 它不包含基本类型。如果要搜索基类中的字段,则需要使用BindingFlags.FlattenHierarchy
。
你应该看看BindingFlags documentation来完成你需要的东西。