Отражение позволяет писать код, который может проверять различные аспекты самого кода.
Это позволяет делать простые вещи, например:
Проверять тип объекта во время выполнения (например, простые вызовы typeof ()
)
Проверять атрибуты объекта во время выполнения для изменения поведения метода (различные методы сериализации в .NET)
Для гораздо более сложных задач, таких как:
Более раннее употребление встречается гораздо чаще. Последний полезен разработчикам, работающим над архитектурами подключаемых модулей для своих приложений, или людям, которые хотят менять сборки во время выполнения в зависимости от изменений конфигурации.
Отражение - это способность типов предоставлять информацию о себе. Например, сборка может рассказать о том, что она содержит, тип может рассказать о своих методах, свойствах и т.д.
Динамическое предоставление этой информации полезно во многих отношениях. Один простой пример - метаданные, используемые веб-службами: когда человек "потребляет" веб-службу, для его клиента создается прокси-класс. Этот прокси генерируется из WSDL-документа, который чаще всего генерируется из метаданных типа, созданных с помощью рефлексии.
Другой простой пример - динамическая загрузка типов для выполнения некоторой единицы работы. В одном из проектов, над которым я работал, отражение использовалось для загрузки "правил" из базы данных, чтобы применить их к входам в систему.
Отражение помогает вам выполнять метапрограммирование, которое, несомненно, является одной из самых крутых техник программирования. Для получения дополнительной информации наберите в Google "метапрограммирование".
Отражение позволяет вашему коду вызывать методы и свойства, о которых вы не знали при компиляции кода. Один из встроенных классов, который использует это, - XmlSerializer. Вы можете передать ему любой объект, который хотите преобразовать в XML. Он спрашивает объект, все ли его свойства используют отражение, а затем может создать XML-документ, содержащий необходимые элементы для представления объекта.
Отражение - это способ программного обнаружения типов во время выполнения. Это очень важно, потому что языки .NET строго типизированы. Возможность доступа к этим метаданным чрезвычайно полезна.
Большая вещь прямо сейчас (свободные интерфейсы / адаптеры) в значительной степени зависит от рефлексии. В частности, статическое отражение довольно велико. Если вы хотите увидеть конкретные примеры и хорошее объяснение статического отражения, посетите:
http://jagregory.com/writings/introduction-to-static-reflection/
http: //www.lostechies. com / blogs / gabrielschenker / archive / 2009/02/03 / dynamic-Reflection-versus-static-reflection.aspx
Конечно, это небольшая часть отражений в целом. Если вам нужна дополнительная информация об общем использовании отражения, ознакомьтесь с Apress Pro C # 2008 и платформой .NET 3.5, четвертое издание , глава 16. В нем довольно подробно рассматривается тип .NET. system и как это используется в библиотеках и во время выполнения.