Проще говоря: потому что иногда вы не знаете частей «Foo» или «hello» во время компиляции.
Подавляющее большинство из вас do знают это, поэтому не стоит использовать отражение. Однако иногда, однако, вы этого не делаете - и в этот момент размышление - это все, к чему вы можете обратиться.
В качестве примера protocol buffers позволяет генерировать код, который либо содержит полный статически типизированный код для чтения и записи сообщений, либо генерирует его достаточно, чтобы остальное могло быть выполнено путем отражения: в случае отражения загрузка/save код должен получить и установить свойства через отражение - он знает имена свойств, связанных с дескриптором сообщения. Это намного (намного) медленнее, но приводит к значительно меньшему генерированию кода.
Другим примером может быть инъекция зависимостей, где имена типов, используемых для зависимостей, часто предоставляются в файлах конфигурации: структура DI затем должна использовать отражение для построения всех задействованных компонентов, поиска конструкторов и/или свойств вдоль путь.
Почему это было приостановлено? – SLaks
+1, так как это так. –
@Jon: Разве это не дубликат? –