Иногда использование отражения может быть чем-то вроде взлома, но в большинстве случаев это просто самый фантастический инструмент кода.
Посмотрите на сетку свойств .Net - любой, кто использовал Visual Studio, будет с ней знаком. Вы можете указать его на любой объект, и он создаст простой редактор свойств. Это использует отражение, фактически большинство инструментов VS.
Посмотрите на модульные тесты - они загружаются отражением (по крайней мере, в NUnit и MSTest).
Отражение допускает поведение в динамическом стиле из статических языков.
Единственное, что ему действительно нужно, - это утка - компилятор C # уже поддерживает это: вы можете foreach
делать все, что похоже на IEnumerable
, независимо от того, реализует он интерфейс или нет. Вы можете использовать синтаксис коллекции C # 3 для любого класса, у которого есть метод с именем Add
.
Используйте отражение везде, где вам нужно поведение в динамическом стиле - например, у вас есть коллекция объектов, и вы хотите проверить одно и то же свойство для каждого.
Риски аналогичны для динамических типов - исключения времени компиляции становятся исключениями времени выполнения. Ваш код не такой «безопасный», и вы должны реагировать соответствующим образом.
. Код отражения .Net очень быстрый, но не такой быстрый, как был бы явный вызов.