在c#中测试对象是否实现给定接口的最简单方法是什么?(回答这个问题 在Java中)


当前回答

if (object is IBlah)

or

IBlah myTest = originalObject as IBlah

if (myTest != null)

其他回答

除了使用"is"操作符进行测试外,你还可以装饰你的方法,以确保传递给它的变量实现了特定的接口,如下所示:

public static void BubbleSort<T>(ref IList<T> unsorted_list) where T : IComparable
{
     //Some bubbly sorting
}

我不确定这是在哪个版本的。net中实现的,所以它可能在你的版本中不起作用。

例如:

if (obj is IMyInterface) {}

本课程:

检查typeof(MyClass). getinterfaces()是否包含该接口。

    interface IItem
    {

    }

    class ItemImp : IItem
    {

    }

    class Program
    {
        static void Main(string[] args)
        {
            Type t = typeof(ItemImp);

            Console.WriteLine("t == typeof(IItem) -> {0}", t == typeof(IItem));
            Console.WriteLine("typeof(IItem).IsAssignableFrom(t) -> {0}", typeof(IItem).IsAssignableFrom(t));
            Console.WriteLine("t is IItem -> {0}", t is IItem);
            Console.WriteLine("new ItemImp() is IItem -> {0}", new ItemImp() is IItem);
        }
    }

// Here are outputs:
// t == typeof(IItem) -> False
// typeof(IItem).IsAssignableFrom(t) -> True
// t is IItem -> False
// new ItemImp() is IItem -> True

如果你想在检查后使用类型转换对象: 从c# 7.0开始:

if (obj is IMyInterface myObj)

这和

IMyInterface myObj = obj as IMyInterface;
if (myObj != null)

参见.NET文档:模式匹配概述

我使用

断言。(myObject是ImyInterface);

在我的单元测试中测试myObject是一个实现了我的接口ImyInterface的对象。