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