我的基类有一个公共静态方法,但是当我调用typeof(TDerived).GetMethods(BindingFlags.Public |BindingFlags.Static
时,我的方法没有返回。(TDerived当然以某种方式继承了我的基类)。在此查询的位置没有对基类的引用。
我做错了什么?
使用BindingFlags.FlattenHierarchy
标志:
typeof(TDerived).GetMethods(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy)
这是Type.GetMethods(BindingFlags)
方法的注释部分中记录的行为
如果您想获得直接基类类型的所有静态成员,例如:只有当前类继承的类的静态方法,那么您也可以通过反射访问它。
你的代码,从你的问题,然后变成:
typeof(TDerived).BaseType.GetMethods(BindingFlags.Public | BindingFlags.Static)
^---+---^
|
+-- add this
当然,这只会使获得该类型的静态方法。如果您希望所有的静态方法都是您自己的类型和的基类型,那么使用扁平化层次选项,@Ondrej回答,更好。