我有一個接口方法的MethodInfo
和類,它實現接口的Type
。 我想找到實現接口方法的類方法的MethodInfo
。如何獲得接口方法的MethodInfo,實現類方法的MethodInfo?
簡單的method.GetBaseDefinition()
不適用於接口方法。 按名稱查找也不起作用,因爲在明確實現接口方法時,它可以具有任何名稱(是的,不在C#中)。
那麼什麼是正確的這樣做的方式涵蓋了所有的可能性?
我有一個接口方法的MethodInfo
和類,它實現接口的Type
。 我想找到實現接口方法的類方法的MethodInfo
。如何獲得接口方法的MethodInfo,實現類方法的MethodInfo?
簡單的method.GetBaseDefinition()
不適用於接口方法。 按名稱查找也不起作用,因爲在明確實現接口方法時,它可以具有任何名稱(是的,不在C#中)。
那麼什麼是正確的這樣做的方式涵蓋了所有的可能性?
好的,我找到了一種方法,使用GetInterfaceMap。
var map = targetType.GetInterfaceMap(interfaceMethod.DeclaringType);
var index = Array.IndexOf(map.InterfaceMethods, interfaceMethod);
if (index == -1)
{
//this should be literally 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#'呃
您無法按名稱匹配。名稱不必匹配。這是一個C#規則,其他語言(VB)讓你命名覆蓋方法,無論你喜歡什麼。 – 2009-07-11 13:15:02