У меня есть программа, требующая быстрой работы. В одном из его внутренних циклов мне нужно проверить тип объекта, чтобы увидеть, наследуется ли он от определенного интерфейса.
Один из способов сделать это - использовать встроенную в CLR функцию проверки типов. Самый элегантный метод, вероятно, это ключевое слово is:
if (obj is ISpecialType)
Другой подход - предоставить базовому классу мою собственную виртуальную функцию GetType (), которая возвращает предопределенное значение перечисления (в моем случае на самом деле мне нужен только bool). Этот метод будет быстрым, но менее элегантным.
Я слышал, что есть инструкция IL специально для ключевого слова is, но это не значит, что она выполняется быстро при переводе в собственную сборку. Может ли кто-нибудь поделиться некоторыми взглядами на эффективность «есть» по сравнению с другим методом?
ОБНОВЛЕНИЕ: Спасибо за все осознанные ответы! Кажется, в ответах разбросано несколько полезных моментов: точка зрения Эндрю об автоматическом выполнении преобразования важна, но данные о производительности, собранные Binary Worrier и Яном, также чрезвычайно полезны. Было бы здорово, если бы один из ответов был отредактирован, чтобы включить всю эту информацию.