如何查找方法是否正在实现特定接口

时间:2011-09-11 15:32:38

标签: c# reflection

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

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

实施界面:

interface IMyInterface
{
    void SomeMethod();
}

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

3 个答案:

答案 0 :(得分:15)

您可以使用GetInterfaceMap

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

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

答案 1 :(得分:8)

您可以使用Type.GetInterfaceMap()

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

答案 2 :(得分:-5)

如果你不必使用反射,那么不要。它不像使用is运算符或as运算符

那样高效
class MyClass : IMyInterface
{
    public void SomeMethod();
}

if ( someInstance is IMyInterface ) dosomething();

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