如何发现一个方法是否实现了特定的接口

本文关键字:实现 接口 是否 一个 何发现 发现 方法 | 更新日期: 2023-09-27 18:08:09

我有一个方法的MehtodBase,我需要知道该方法是否是特定接口的实现。所以如果我有下面的类:

class MyClass : IMyInterface
{
    public void SomeMethod();
}

实现接口:

interface IMyInterface
{
    void SomeMethod();
}

我希望能够在运行时发现(使用反射)如果某个方法实现了IMyInterface。

如何发现一个方法是否实现了特定的接口

可以使用GetInterfaceMap

InterfaceMapping map = typeof(MyClass).GetInterfaceMap(typeof(IMyInterface));
foreach (var method in map.TargetMethods)
{
    Console.WriteLine(method.Name + " implements IMyInterface");
}

您可以使用Type.GetInterfaceMap():

bool Implements(MethodInfo method, Type iface)
{
    return method.ReflectedType.GetInterfaceMap(iface).TargetMethods.Contains(method);
}

如果你不需要使用反射,那就不要使用。它的性能不如使用is操作符或as操作符

class MyClass : IMyInterface
{
    public void SomeMethod();
}
if ( someInstance is IMyInterface ) dosomething();
var foo = someInstance as IMyInterface;
if ( foo != null ) foo.SomeMethod();