Тест, если объект реализует интерфейс

Независимо от того, что вы делаете в конечном итоге, убедитесь, что вы проверяете, что ваш вход еще не был искажен magic_quotes или каким-то другим благонамеренным мусором, и, если необходимо, запустите его через stripslashes или что-то еще, чтобы его дезинфицировать .

340
задан Community 23 May 2017 в 02:03
поделиться

5 ответов

if (object is IBlah)

или

IBlah myTest = originalObject as IBlah

if (myTest != null)
547
ответ дан Robert C. Barth 23 November 2019 в 00:35
поделиться

Используя is или as операторы являются корректным путем, если Вы знаете интерфейсный тип во время компиляции и имеете экземпляр типа, Вы тестируете. Что-то, что никто больше, кажется, не упомянул, Type.IsAssignableFrom:

if( typeof(IMyInterface).IsAssignableFrom(someOtherType) )
{
}

я думаю, что это намного более опрятно, чем просмотр массива, возвращенного GetInterfaces, и имеет преимущество работы для классов также.

211
ответ дан Andrew Kennan 23 November 2019 в 00:35
поделиться

Для экземпляра:

if (obj is IMyInterface) {}

Для класса:

Проверка, если typeof(MyClass).GetInterfaces() содержит интерфейс.

21
ответ дан Jay Bazuzi 23 November 2019 в 00:35
поделиться

В дополнение к тестированию использования оператор, можно украсить методы, чтобы удостовериться, что переменные передали ему, реализуют конкретный интерфейс, как так:

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

я не уверен, какая версия.Net это было реализовано в том, таким образом, это не может работать в Вашей версии.

3
ответ дан jamesmillerio 23 November 2019 в 00:35
поделиться

Это должно работать:

MyInstace.GetType().GetInterfaces();

, Но хороший также:

if (obj is IMyInterface)

Или даже (не очень изящный):

if (obj.GetType() == typeof(IMyInterface))
-13
ответ дан Yoann. B 23 November 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: