如何获取基类的公共静态方法?
我的基类有一个公共静态方法,但是当我调用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选项,这要好得多。