【问题标题】:How to get MethodInfo of interface method, having implementing MethodInfo of class method?如何获取接口方法的MethodInfo,实现类方法的MethodInfo?
【发布时间】:2009-07-11 12:38:21
【问题描述】:

我有一个 interface 方法的 MethodInfo 和一个实现 interfaceType。 我想找到实现接口方法的类方法的MethodInfo

简单的method.GetBaseDefinition() 不适用于接口方法。 按名称查找也不起作用,因为当显式实现接口方法时,它可以有任何名称(是的,不是在 C# 中)。

那么,涵盖所有可能性的正确方法是什么?

【问题讨论】:

    标签: c# .net reflection methodinfo


    【解决方案1】:

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

    【讨论】:

    • 处理泛型方法时索引返回 -1。
    【解决方案2】:

    我用这个。

    var interfacemethodParameterTypes = interfaceMethodInfo.GetParameters().Select(p => p.ParameterType).ToArray();
    
    var map = targetType.GetInterfaceMap(interfaceMethodInfo.DeclaringType);
    
    return map.TargetType.GetMethod(interfaceMethodInfo.Name, interfacemethodParameterTypes);
    

    【讨论】:

      【解决方案3】:

      这是一个扩展方法!

      public static MethodInfo GetImplementedMethod(this Type targetType, MethodInfo interfaceMethod)
      {
          if (targetType is null) throw new ArgumentNullException(nameof(targetType));
          if (interfaceMethod is null) throw new ArgumentNullException(nameof(interfaceMethod));
      
          var map = targetType.GetInterfaceMap(interfaceMethod.DeclaringType);
          var index = Array.IndexOf(map.InterfaceMethods, interfaceMethod);
          if (index < 0) return null;
      
          return map.TargetMethods[index];
          
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-28
        • 2013-11-19
        • 1970-01-01
        • 2014-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多