Сегодня коллега задал мне интересный вопрос: "ключевое слово/оператор С#" считается "отражением"?
object tmp = "a string";
if(tmp is String)
{
}
Как этот оператор реализован за кулисами? Требует ли это рефлексии или самоанализа? Или из-за строго типизированного характера языка, является ли Тип объекта немедленно доступным как атрибут верхнего уровня для объекта в памяти?
MSDN утверждает, что:
Обратите внимание, что оператор is учитывает только ссылки, конверсии бокса и распаковывание конверсий. Другие преобразования, такие как пользовательские преобразования, не рассматриваются оператором is.
Возможность рассматривать конвертированные в коробку и распакованные конверсии, по-видимому, подразумевает мне какую-то интроспекцию.