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

本文关键字:静态方法 何获得 基类 | 更新日期: 2023-09-27 17:50:11

我的基类有一个公共静态方法,但是当我调用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回答,更好。