В ранее рассмотренном разделе "Использование интерфейсов" для получения ссылки на интерфейс, реализуемый объектом, применяется операция as языка C#. Если объект не поддерживает данный интерфейс, будет возвращена пустая ссылка (null).
В большинстве случаев у нас есть или можно создать экземпляр объекта, а потом применить к нему операцию as, но делать так не совсем рационально. Во-первых, создание объекта может потребовать больших затрат, тем более что неизвестно, будем ли он использован в дальнейшем. Во-вторых, возможно, что объект всё равно не удастся создать, потому что тип может быть абстрактным классом или интерфейсом.
В предыдущем примере чтобы определить, что тип, считанный из сборки, реализует необходимый интерфейс, был использован метод IsAssignableFrom класса Type, который в качестве аргумента принимает объект класса Type.
Класс Type имеет ещё один метод со схожей функциональностью – IsInstanceOfType. В отличие от IsAssignableFrom он принимает в качестве аргумента не объект Type, а экземпляр конкретного объекта. Метод IsInstanceOfType определяет, является ли тип объекта, переданного в аргументе, наследником типа, для которого этот метод вызван. Иначе можно это сформулировать вот так:
type.IsInstanceOfType(obj) = obj.GetType().IsAssignableFrom(type)
Примечание. В Java-программистов похожая по смыслу операция instanceof имеет такие же аргументы, но только в другом порядке. Она применяется к объекту и принимает в качестве аргумента имя типа. В Java операция instanceof совпадает по смыслу с операцией is в С#.