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

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

使用BindingFlags.FlattenHierarchy标志:

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

它是Type.GetMethods(BindingFlags)方法的备注部分中记录的行为 。

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

从您的问题中,您的代码将变为:

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

当然,这只会获得该类型的静态方法。 如果你想要你自己类型的所有静态方法基本类型,那么请使用@Ondrej 回答的FlattenHierarchy选项,这要好得多。