如何确定一个类是否实现了特定的接口

本文关键字:实现 接口 是否 何确定 一个 | 更新日期: 2023-09-27 18:18:07

假设我有一个类似的类

interface ISampleInterface
{
  void SampleMethod();
}
class ImplementationClass : ISampleInterface
{
// Explicit interface member implementation: 
void ISampleInterface.SampleMethod()
{
    // Method implementation.
}
static void Main()
{
    // Declare an interface instance.
    ISampleInterface obj = new ImplementationClass();
    // Call the member.
    obj.SampleMethod();
}
}

从main方法中,我如何确定ImplementationClass类在编写代码之前实现了ISampleInterface,如下所示

SampleInterface obj = new ImplementationClass();
obj.SampleMethod();

有什么办法吗?请讨论。谢谢。

如何确定一个类是否实现了特定的接口

is关键字是一个很好的解决方案。您可以测试对象是接口还是其他类。你会做这样的事情:

if (obj is ISampleInterface)
{
     //Yes, obj is compatible with ISampleInterface
}

如果在运行时没有对象的实例,而是Type,则可以使用 IsAssignableFrom:

Type type = typeof(ISampleInterface);
var isassignable = type.IsAssignableFrom(otherType);

您可以使用反射:

bool result = typeof(ISampleInterface).IsAssignableFrom(typeof(ImplementationClass));
    public static bool IsImplementationOf(this Type checkMe, Type forMe)
    {
        foreach (Type iface in checkMe.GetInterfaces())
        {
            if (iface == forMe)
                return true;
        }
        return false;
    }

使用以下方法调用它:

if (obj.GetType().IsImplementationOf(typeof(SampleInterface)))
    Console.WriteLine("obj implements SampleInterface");

当您对实现类进行硬编码时,您知道它实现了哪些接口,因此您只需查看源代码或文档即可知道类实现了哪些接口。

如果接收未知类型的对象,则有几种方法可以检查接口的实现:

void Test1(object a) {
    var x = a as IMyInterface;
    if (x != null) {
        // x implements IMyInterface, you can call SampleMethod
    }
}
void Test2(object a) {
    if (a is IMyInterface) {
        // a implements IMyInterface
        ((IMyInterface)a).SampleMethod();
    }
}

一种模式(由FxCop推荐(是

SampleInterface i = myObject as SampleInterface;
if (i != null) {
    // MyObject implements SampleInterface
}