Каков самый простой способ тестирования, если объект реализует данный интерфейс в С#? (Ответьте на этот вопрос в Java)
Проверить, реализует ли объект интерфейс
Ответ 1
if (object is IBlah)
или
IBlah myTest = originalObject as IBlah
if (myTest != null)
Ответ 2
Использование операторов is
или as
является правильным способом, если вы знаете тип интерфейса во время компиляции и имеете экземпляр типа, который вы тестируете. Что-то, о чем никто больше не упоминал, Type.IsAssignableFrom
:
if( typeof(IMyInterface).IsAssignableFrom(someOtherType) )
{
}
Я думаю, что это намного опрятно, чем просмотр массива, возвращаемого GetInterfaces
, и имеет то преимущество, что он работает и для классов.
Ответ 3
Для экземпляра:
if (obj is IMyInterface) {}
Для класса:
Проверьте, содержит ли typeof(MyClass).GetInterfaces()
интерфейс.
Ответ 4
Отклонение от ответа @AndrewKennan. Я в конечном итоге использовал для типов, полученных во время выполнения:
if (serviceType.IsInstanceOfType(service))
{
// 'service' does implement the 'serviceType' type
}
Ответ 5
В дополнение к тестированию с использованием оператора "is" вы можете украсить свои методы, чтобы убедиться, что переменные, переданные ему, реализуют определенный интерфейс, например:
public static void BubbleSort<T>(ref IList<T> unsorted_list) where T : IComparable
{
//Some bubbly sorting
}
Я не уверен, какая версия .Net была реализована, поэтому она может не работать в вашей версии.
Ответ 6
Что для меня работало:
Assert.IsNotNull(typeof (YourClass).GetInterfaces().SingleOrDefault(i => i == typeof (ISomeInterface)));
Ответ 7
Недавно я попытался использовать ответ Andrew Kennan, и по какой-то причине он не работал у меня. Я использовал это вместо этого, и он работал (обратите внимание: может потребоваться запись пространства имен).
if (typeof(someObject).GetInterface("MyNamespace.IMyInterface") != null)
Ответ 8
Я использовал
Assert.IsTrue(myObject is ImyInterface);
для теста в моем unit test, который проверяет, что myObject является объектом, который реализовал мой интерфейс ImyInterface.
Ответ 9
Этот Сообщение является хорошим ответом.
public interface IMyInterface {}
public class MyType : IMyInterface {}
Это простой пример:
typeof(IMyInterface).IsAssignableFrom(typeof(MyType))
или
typeof(MyType).GetInterfaces().Contains(typeof(IMyInterface))
Ответ 10
Это должно работать:
MyInstace.GetType().GetInterfaces();
Но хорошо тоже:
if (obj is IMyInterface)
Или даже (не очень элегантный):
if (obj.GetType() == typeof(IMyInterface))