Заметным отличием является также то, что «is» имеет интуитивно понятный смысл для тестирования наследования или реализации интерфейса, тогда как IsAssignableFrom не имеет никакого смысла. Имя метода Type.IsAssignableFrom является расплывчатым и запутанным при применении для тестирования наследования или обнаружения реализаций интерфейса. Следующая оболочка для этих целей создаст более интуитивно понятный код приложения:
public static bool CanBeTreatedAsType(this Type CurrentType, Type TypeToCompareWith)
{
// Always return false if either Type is null
if (CurrentType == null || TypeToCompareWith == null)
return false;
// Return the result of the assignability test
return TypeToCompareWith.IsAssignableFrom(CurrentType);
}
Тогда можно иметь более понятный синтаксис клиента, например:
bool CanBeTreatedAs = typeof(SimpleChildClass).CanBeTreatedAsType(typeof(SimpleClass));
CanBeTreatedAs = typeof(SimpleClass).CanBeTreatedAsType(typeof(IDisposable));
Преимущество этого метода вместо ключевого слова "is" заключается в том, что его можно использовать во время выполнения для проверки неизвестных, произвольных типов, тогда как ключевое слово "is" (и универсальный параметр типа) требует знания во время компиляции. определенных типов.