Как найти, если метод реализует определенный интерфейс - PullRequest
14 голосов
/ 11 сентября 2011

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

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

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

interface IMyInterface
{
    void SomeMethod();
}

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

Ответы [ 3 ]

15 голосов
/ 11 сентября 2011

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

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

foreach (var method in map.TargetMethods)
{
    Console.WriteLine(method.Name + " implements IMyInterface");
}
8 голосов
/ 11 сентября 2011

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

bool Implements(MethodInfo method, Type iface)
{
    return method.ReflectedType.GetInterfaceMap(iface).TargetMethods.Contains(method);
}
0 голосов
/ 11 сентября 2011

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

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

if ( someInstance is IMyInterface ) dosomething();

var foo = someInstance as IMyInterface;
if ( foo != null ) foo.SomeMethod();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...