Как найти, реализует ли метод определенный интерфейс
У меня есть 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();