无法在继承的方法上使用GetMethod()

时间:2019-06-07 01:01:09

标签: c# reflection

我有一个基类,该基类具有一个名为“ GetAllKeys”的方法,我正在尝试通过反射调用该方法。问题是,当我使用GetMethod()时,结果为空。

var method = classType.GetMethod("GetAllKeys", BindingFlags.Public | BindingFlags.Static );

这是类中方法的签名。

public static IEnumerable<string> GetAllKeys()

通过调试器,我可以看到该方法存在并且具有以下属性。

InvocationFlags = INVOCATION_FLAGS_INITIALIZED | INVOCATION_FLAGS_NEED_SECURITY
BindingFlags    Static | Public 
IsDynamicallyInvokable  true    
System.Runtime.InteropServices._MethodBase.IsHideBySig  true    
System.Runtime.InteropServices._MethodBase.IsPublic true    
System.Runtime.InteropServices._MethodBase.IsStatic true    

看起来HideBySig是一个方法属性,所以我不能在GetMethod()中使用它,并且过去也不必在同一方法中使用其他方法继承的类。

我该怎么做才能成功检索此方法进行调用?

1 个答案:

答案 0 :(得分:2)

您提到这是基类中的。要获取在基类中定义的方法,必须修改绑定标志以包括以下内容:

var method = classType.GetMethod("GetAllKeys", BindingFlags.Public | BindingFlags.Static  | FlattenHierarchy);

根据documentationBindingFlags.FlattenHierarchy执行此操作:

  

指定公共和受保护的静态成员在层次结构中   应该退货。继承类中的私有静态成员是   没有退货。静态成员包括字段,方法,事件和   属性。不会返回嵌套类型。