我有一个MethodInfo
接口方法和Type
实现该接口的类 。 我想找到MethodInfo
实现接口方法的类方法。
简单method.GetBaseDefinition()
不与接口方法的工作。 按名称查询不会工作,因为实现接口的方法时明确它可以有任何名称(是的,不C#)。
那么,什么是这样做的,涵盖所有可能性的正确方法是什么?
我有一个MethodInfo
接口方法和Type
实现该接口的类 。 我想找到MethodInfo
实现接口方法的类方法。
简单method.GetBaseDefinition()
不与接口方法的工作。 按名称查询不会工作,因为实现接口的方法时明确它可以有任何名称(是的,不C#)。
那么,什么是这样做的,涵盖所有可能性的正确方法是什么?
OK,我找到了一种方法,使用GetInterfaceMap 。
var map = targetType.GetInterfaceMap(interfaceMethod.DeclaringType);
var index = Array.IndexOf(map.InterfaceMethods, interfaceMethod);
if (index == -1)
{
//this should literally be impossible
}
return map.TargetMethods[index];
嗯-不知道正确的方式,但你可以通过所有接口上的类型循环,然后寻找方法接口做到这一点。 不知道你是否可以直接做没有经过界面的循环,因为你还挺不卡住GetBaseDefinition()。
对于我的一个方法(的MyMethod)和我的类型(MyClass的),其实现此方法,我可以使用此界面:
MethodInfo interfaceMethodInfo = typeof(IMyInterface).GetMethod("MyMethod");
MethodInfo classMethodInfo = null;
Type[] interfaces = typeof(MyClass).GetInterfaces();
foreach (Type iface in interfaces)
{
MethodInfo[] methods = iface.GetMethods();
foreach (MethodInfo method in methods)
{
if (method.Equals(interfaceMethodInfo))
{
classMethodInfo = method;
break;
}
}
}
你得检查MethodInfo.Equals工作,如果这两种方法有不同的名称。 我甚至不知道这是可能的,可能是因为我是一个C#'呃