我有一个基类,该基类具有一个名为“ 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()
中使用它,并且过去也不必在同一方法中使用其他方法继承的类。
我该怎么做才能成功检索此方法进行调用?
答案 0 :(得分:2)
您提到这是基类中的。要获取在基类中定义的方法,必须修改绑定标志以包括以下内容:
var method = classType.GetMethod("GetAllKeys", BindingFlags.Public | BindingFlags.Static | FlattenHierarchy);
根据documentation,BindingFlags.FlattenHierarchy
执行此操作:
指定公共和受保护的静态成员在层次结构中 应该退货。继承类中的私有静态成员是 没有退货。静态成员包括字段,方法,事件和 属性。不会返回嵌套类型。