Как найти, реализует ли метод определенный интерфейс

У меня есть MehtodBase метода, и мне нужно знать, является ли этот метод реализацией определенного интерфейса. Поэтому, если у меня есть следующий класс:

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

Реализация интерфейса:

interface IMyInterface
{
    void SomeMethod();
}

Я хочу иметь возможность обнаруживать во время выполнения (используя отражение), если определенный метод реализует IMyInterface.

Ответы

Ответ 1

Вы можете использовать GetInterfaceMap для этого.

InterfaceMapping map = typeof(MyClass).GetInterfaceMap(typeof(IMyInterface));

foreach (var method in map.TargetMethods)
{
    Console.WriteLine(method.Name + " implements IMyInterface");
}

Ответ 2

Вы можете использовать Type.GetInterfaceMap() для этого:

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

Ответ 3

если вам не нужно использовать отражение, тогда нет. он не так эффективен, как, скажем, с помощью оператора is или оператора as

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

if ( someInstance is IMyInterface ) dosomething();

var foo = someInstance as IMyInterface;
if ( foo != null ) foo.SomeMethod();