Microsoft хотела поддержать Отражение в .Net? или это было обязано? - PullRequest
4 голосов
/ 06 декабря 2010

Как гласит заголовок, было ли отражение в .Net целью или это было естественным результатом разработки внутренних элементов .Net (например, как языки компилируются в сборки IL)?

А по поводу усиления отражения. Вот некоторые примеры использования отражения, которые я вижу здесь на этом сайте:

  • Использование отражения для доступа к переопределенному методу базового класса.
  • Использование отражения для доступа к закрытому полю класса.

и мой другой вопрос: если мы смогли получить доступ к закрытым полям и переопределенным базовым методам (чтобы нарушить основные правила структуры), используя рефлексию, то зачем вообще ставить эти (строгие?) Роли на первое место?

1 Ответ

8 голосов
/ 06 декабря 2010

Отражение - очень мощный инструмент; Я полностью ожидаю, что это было очень, очень обдуманным. У меня нет цитаты, чтобы поддержать это, хотя; однако - да, сильный API отражения также необходим для таких вещей, как BinaryFormatter и стек «удаленного взаимодействия», который использовался со дня 0 (но который сейчас менее популярен).

На самом деле огромное количество библиотечного кода использует рефлексию; привязка данных или сериализация, например. Без размышлений вам нужно было бы написать много кода вручную, чтобы сделать некоторые очень простые вещи, которые библиотеки обрабатывают автоматически посредством отражения.

Другое большое применение - метапрограммирование; написание кода во время выполнения для дополнения скомпилированного кода; полезен в таких вещах, как IoC / DI и т. д. Или просто когда вам нужно отражение, но быстрее ; p

Re такие вещи, как private; в .NET есть уровни доверия; не весь код может получить доступ к вашим внутренним компонентам, если вы не выполняете с полным доверием (по общему признанию, большая часть кода не выполняет с полным доверием). А за определенным уровнем паранойи это ложная цель в любом случае , поскольку существуют способы внешние по отношению к .NET ввязываться в процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...