Отражение - очень мощный инструмент; Я полностью ожидаю, что это было очень, очень обдуманным. У меня нет цитаты, чтобы поддержать это, хотя; однако - да, сильный API отражения также необходим для таких вещей, как BinaryFormatter
и стек «удаленного взаимодействия», который использовался со дня 0 (но который сейчас менее популярен).
На самом деле огромное количество библиотечного кода использует рефлексию; привязка данных или сериализация, например. Без размышлений вам нужно было бы написать много кода вручную, чтобы сделать некоторые очень простые вещи, которые библиотеки обрабатывают автоматически посредством отражения.
Другое большое применение - метапрограммирование; написание кода во время выполнения для дополнения скомпилированного кода; полезен в таких вещах, как IoC / DI и т. д. Или просто когда вам нужно отражение, но быстрее ; p
Re такие вещи, как private
; в .NET есть уровни доверия; не весь код может получить доступ к вашим внутренним компонентам, если вы не выполняете с полным доверием (по общему признанию, большая часть кода не выполняет с полным доверием). А за определенным уровнем паранойи это ложная цель в любом случае , поскольку существуют способы внешние по отношению к .NET ввязываться в процесс.