2009-07-11 56 views
23

我有一個接口方法的MethodInfo類,它實現接口Type。 我想找到實現接口方法的類方法的MethodInfo如何獲得接口方法的MethodInfo,實現類方法的MethodInfo?

簡單的method.GetBaseDefinition()不適用於接口方法。 按名稱查找也不起作用,因爲在明確實現接口方法時,它可以具有任何名稱(是的,不在C#中)。

那麼什麼是正確的這樣做的方式涵蓋了所有的可能性?

回答

33

好的,我找到了一種方法,使用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]; 
1

嗯 - 不知道正確的方式,但你可以通過循環你的類型的所有接口,然後搜索接口的方法來做到這一點。不知道你是否可以在沒有循環接口的情況下直接做到這一點,因爲你沒有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#'呃

+0

您無法按名稱匹配。名稱不必匹配。這是一個C#規則,其他語言(VB)讓你命名覆蓋方法,無論你喜歡什麼。 – 2009-07-11 13:15:02

相關問題