Независимо от того, что вы делаете в конечном итоге, убедитесь, что вы проверяете, что ваш вход еще не был искажен magic_quotes
или каким-то другим благонамеренным мусором, и, если необходимо, запустите его через stripslashes
или что-то еще, чтобы его дезинфицировать .
if (object is IBlah)
или
IBlah myTest = originalObject as IBlah
if (myTest != null)
Используя is
или as
операторы являются корректным путем, если Вы знаете интерфейсный тип во время компиляции и имеете экземпляр типа, Вы тестируете. Что-то, что никто больше, кажется, не упомянул, Type.IsAssignableFrom
:
if( typeof(IMyInterface).IsAssignableFrom(someOtherType) )
{
}
я думаю, что это намного более опрятно, чем просмотр массива, возвращенного GetInterfaces
, и имеет преимущество работы для классов также.
Для экземпляра:
if (obj is IMyInterface) {}
Для класса:
Проверка, если typeof(MyClass).GetInterfaces()
содержит интерфейс.
В дополнение к тестированию использования оператор, можно украсить методы, чтобы удостовериться, что переменные передали ему, реализуют конкретный интерфейс, как так:
public static void BubbleSort<T>(ref IList<T> unsorted_list) where T : IComparable
{
//Some bubbly sorting
}
я не уверен, какая версия.Net это было реализовано в том, таким образом, это не может работать в Вашей версии.
Это должно работать:
MyInstace.GetType().GetInterfaces();
, Но хороший также:
if (obj is IMyInterface)
Или даже (не очень изящный):
if (obj.GetType() == typeof(IMyInterface))