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