Причина, по которой люди опасаются без необходимости использовать рефлексию, заключается не в производительности: да, использование рефлексии сопряжено с некоторыми издержками, но часто решение проблемы без него требует другого подхода с сопоставимой сложностью, и даже если это не так, накладные расходы редко значимый (особенно для разработки на уровне приложений).
Используя рефлексию, некоторые важные предположения, которые обычно можно сделать относительно исходного кода, нарушаются, и такие инструменты, как «Найти все ссылки», перестают работать надежно. Отражение также в основном устраняет большую часть безопасности типов, которую обеспечивает компилятор, скажем, в C #, и большинство ошибок программирования, которые система типов обычно перехватывает и переводит в ошибки компилятора, теперь в лучшем случае становятся ошибками времени выполнения или, в худшем случае, очень неясными ошибками.
Так почему же тогда люди используют отражение? Проще говоря, потому что, несмотря на проблемы, описанные выше, это очень ценный инструмент. С отражением, некоторые преимущества динамического программирования могут быть получены в статическом, строго типизированном языке, таком как C #, и языки динамического программирования недавно показали свои достоинства, особенно в области веб-программирования - PHP, Javascript и довольно заметный Python. Все они используют динамическую типизацию и хорошо подходят для веб-программирования. Но поскольку язык по-прежнему C #, вы можете оставить большую часть своего приложения в строго типизированном языке ООП и написать небольшую часть, в которой динамическое поведение действительно имеет значение для отражения.
Типичный пример - когда вам нужно представить методы как вызовы веб-службы (используя протокол, еще не встроенный в .NET). Строго типизированный подход ООП действительно работает, но он чрезмерно ограничен и неуклюж. Но если вы используете отражение для сопоставления вызовов методов и пар ключ / значение с аргументами, вы можете один раз написать верстку для такого веб-сервиса, а затем использовать его в любом классе, который вам нравится.