如何获取基类的公共静态方法?

时间:2011-04-15 09:48:04

标签: c# .net reflection

我的基类有一个公共静态方法,但是当我调用typeof(TDerived).GetMethods(BindingFlags.Public |BindingFlags.Static时)我的方法没有被返回。 (当然,TDerived从我的基类以某种方式继承)。我在此查询的位置没有对我的基类的引用 我做错了什么?

2 个答案:

答案 0 :(得分:31)

使用BindingFlags.FlattenHierarchy标志:

typeof(TDerived).GetMethods(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy)

Type.GetMethods(BindingFlags)方法documented behavior in the Remarks section

答案 1 :(得分:2)

如果你想获得直接基类型的所有静态成员,即。只有当前类继承的类的静态方法,你也可以通过反射访问它。

您的问题中的代码将成为:

typeof(TDerived).BaseType.GetMethods(BindingFlags.Public | BindingFlags.Static)
                ^---+---^
                    |
                    +-- add this

当然,这只会 获取该类型的静态方法。如果您想要自己类型的所有静态方法基本类型,那么请更好地使用@Ondrej answered with的FlattenHierarchy选项。