C# "является" оператором - который является отражением?

Файловая система, наверняка. Тогда Вы добираетесь для использования всей функциональности ОС для контакта с этими изображениями - назад взлеты, веб-сервер, даже просто пишущий сценарий пакетных инструментов использования изменений как imagemagic. При хранении их в DB тогда, необходимо будет записать собственный код для решения этих проблем.

29
задан Matt 15 July 2009 в 20:55
поделиться

3 ответа

Обращаясь к ECMA-335 , оператор is генерирует инструкцию IL модели объекта isinst (раздел III §4.6), которая является частью базового набора команд, в отличие от того, что он является частью библиотеки отражений (Раздел IV §5.5).

Редактировать: Оператор is чрезвычайно эффективен по сравнению с библиотекой отражения. Вы можете выполнить в основном тот же тест намного медленнее с помощью отражения:

typeof(T).IsAssignableFrom(obj.GetType())

Редактировать 2: Вы не правы относительно эффективности инструкций castclass и isinst (которые теперь у вас отредактировано вне поста). Они очень оптимизированы для любой практической реализации виртуальных машин. Единственная реальная проблема производительности - это возможность castclass вызвать исключение,

35
ответ дан 28 November 2019 в 01:49
поделиться

Оператор is по существу определяет, возможно ли приведение, но вместо того, чтобы генерировать исключение, когда приведение невозможно, он возвращает false . Если вы рассматриваете литье отражения, то это тоже отражение.

РЕДАКТИРОВАТЬ:

После некоторого исследования я обнаружил, что преобразование выполняется в IL по инструкции castclass , а - ] соответствует инструкции isinst . FxCop имеет правило , которое предупреждает вас, если вы выполняете ненужные преобразования, сначала используя isinst , а затем инструкцию castclass . Даже несмотря на то, что операции эффективны, они все равно требуют затрат на производительность.

5
ответ дан 28 November 2019 в 01:49
поделиться

Другие языки имеют информацию о времени выполнения, достаточную для поддержки динамического приведения типов, и все же ничего, что можно было бы описать как отражение (очевидным примером является C ++).

Таким образом, отражение относится к дополнительным возможностям, выходящим за рамки простого обнаружение типа объекта. "Отражение" на объекте подразумевает, например, способность ходить по его членам.

1
ответ дан 28 November 2019 в 01:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: