检查 MethodInfo 实例是接口泛型方法的实现

最大切换器

我有接口

public interface ITest
{
    Task<bool> MyMethod1<T>(string key, out T value);
    Task<bool> MyMethod2<T>(string key, out T value);
}

他们实施

public class TestImpl : ITest
{
    public Task<bool> MyMethod1<T>(string key, out T value) // Implements interface
    {
        // Skipped
    }

    public Task<bool> MyMethod1<T>(string key, T value) // Does not implements interface
    {
        // Skipped
    }

    public Task<bool> MyMethod2<T>(string key, out T value) // Implements interface
    {
        // Skipped
    }

    public Task<bool> MyMethod2<T>(string key, T value) // Does not implements interface
    {
        // Skipped
    }
}

我需要检查 MethodInfo 的指定实例是 ITest 接口的方法实现。

例如:

void DoWork(MethodInfo methodInfo)
{
    if (...) // Check methodInfo is implementation of any method declared in ITest interface
    {
        /* Do something */
    }
}

怎么做?

马哈茂德

我有一个想法,但我不知道它是否适合你的情况
为什么你没有得到实现的类型,the class然后你通过它的名字得到你感兴趣的接口nameof(ITest),然后你遍历这个接口的所有方法由该类型实现,如下所示:

foreach(var methodInfo in typeof(TestImpl).GetInterface(nameof(ITest)).GetMethods())
{

}

这是一个非常简单的想法,事实上您没有在foreach循环中对接口名称进行硬编码,这也很好。如果它不适合您的情况,请考虑在您的问题中添加更多详细信息,以便我可以考虑不同的想法并编辑此答案,或者有人可以帮助您。
编辑
或者您可以通过属性获取具体的类类型ReflectedType,然后您可以根据使用GetInterfaceMap方法的特定接口类型获取此类型方法的“反射映射”,然后此方法将返回为此接口实现的方法输入这个具体的类类型,然后您可以简单地使用该方法Contains来检查MethodInfo您要求的特定实例。希望这对您有所帮助。

static bool IsMethodImplementationOfInterface(Type interfaceType,MethodInfo method)
{
    return method.ReflectedType.GetInterfaceMap(interfaceType).TargetMethods.Contains(method);
}

foreach (var methodInfo in typeof(TestImpl).GetMethods())
{
    if (IsMethodImplementationOfInterface(typeof(ITest), methodInfo))
    {
        //Logic
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何检查 MethodInfo 是否是特定的接口方法

来自分类Dev

如何检查接口的MethodInfo是否为“新”方法

来自分类Dev

检查泛型T是否实现接口

来自分类Dev

我如何从MethodInfo访问实例

来自分类Dev

在不考虑泛型类型参数的情况下检查类型是否实现了泛型接口

来自分类Dev

在不考虑泛型类型参数的情况下检查类型是否实现了泛型接口

来自分类Dev

获取LINQ的Any()方法的MethodInfo?

来自分类Dev

比较 MethodInfo 和 IMethodInvocation 中的方法

来自分类Dev

为什么不能将项目强制转换为泛型类型-泛型类型是接口,并且在检查项目是否实现了所述接口之后?

来自分类Dev

从Action <T>的实例获取Invoke MethodInfo的最安全方法

来自分类Dev

如何检查MethodInfo是否匹配通用类型T的委托,其中T是Action或Func?

来自分类Dev

检查泛型的类型

来自分类Dev

检查泛型类

来自分类Dev

通过Emit(Opcodes.Call,methodinfo)创建类型的实例

来自分类Dev

检查泛型数组中是否存在异常实例

来自分类Dev

检查泛型数组中是否存在异常实例

来自分类Dev

用methodInfo.Invoke调用的方法返回yield return

来自分类Dev

如何为“ Where”扩展方法获取正确的MethodInfo

来自分类Dev

用methodInfo.Invoke调用的方法返回yield return

来自分类Dev

如何实现接口泛型方法

来自分类Dev

如何实现接口泛型方法

来自分类Dev

从 Java 接口实现泛型方法

来自分类Dev

Scala检查泛型类型

来自分类Dev

未经检查的泛型问题

来自分类Dev

检查方法是否实现带有属性标记的接口方法

来自分类Dev

具有继承的接口的抽象类-System.Enum实现IConvertible,但MethodInfo.GetMethods()不会列出那些

来自分类Dev

如何检查方法参数是否实现了多个接口

来自分类Dev

用不同的泛型类型实现同一泛型Java接口的多个实例?

来自分类Dev

在没有实例的情况下将FakeItEasy A.CallTo与实例MethodInfo一起使用

Related 相关文章

  1. 1

    如何检查 MethodInfo 是否是特定的接口方法

  2. 2

    如何检查接口的MethodInfo是否为“新”方法

  3. 3

    检查泛型T是否实现接口

  4. 4

    我如何从MethodInfo访问实例

  5. 5

    在不考虑泛型类型参数的情况下检查类型是否实现了泛型接口

  6. 6

    在不考虑泛型类型参数的情况下检查类型是否实现了泛型接口

  7. 7

    获取LINQ的Any()方法的MethodInfo?

  8. 8

    比较 MethodInfo 和 IMethodInvocation 中的方法

  9. 9

    为什么不能将项目强制转换为泛型类型-泛型类型是接口,并且在检查项目是否实现了所述接口之后?

  10. 10

    从Action <T>的实例获取Invoke MethodInfo的最安全方法

  11. 11

    如何检查MethodInfo是否匹配通用类型T的委托,其中T是Action或Func?

  12. 12

    检查泛型的类型

  13. 13

    检查泛型类

  14. 14

    通过Emit(Opcodes.Call,methodinfo)创建类型的实例

  15. 15

    检查泛型数组中是否存在异常实例

  16. 16

    检查泛型数组中是否存在异常实例

  17. 17

    用methodInfo.Invoke调用的方法返回yield return

  18. 18

    如何为“ Where”扩展方法获取正确的MethodInfo

  19. 19

    用methodInfo.Invoke调用的方法返回yield return

  20. 20

    如何实现接口泛型方法

  21. 21

    如何实现接口泛型方法

  22. 22

    从 Java 接口实现泛型方法

  23. 23

    Scala检查泛型类型

  24. 24

    未经检查的泛型问题

  25. 25

    检查方法是否实现带有属性标记的接口方法

  26. 26

    具有继承的接口的抽象类-System.Enum实现IConvertible,但MethodInfo.GetMethods()不会列出那些

  27. 27

    如何检查方法参数是否实现了多个接口

  28. 28

    用不同的泛型类型实现同一泛型Java接口的多个实例?

  29. 29

    在没有实例的情况下将FakeItEasy A.CallTo与实例MethodInfo一起使用

热门标签

归档