Отражение мощно, но имеет недостатки. В общем, попробуйте написать код без него, но он чрезвычайно полезен для библиотек «каркаса», где у вас мало знаний о том, какими будут реальные объекты; например:
- Инструменты ORM / DAL (загрузка / сохранение произвольных данных)
- привязки данных
- сериализация
Существуют штрафы за производительность с произвольным отражением, но если вы собираетесь это сделать лоты (в вашей библиотеке и в узком цикле), вы можете уменьшить это:
- с использованием
Delegate.CreateDelegate
(как типизированный делегат; не использовать DynamicInvoke
)
- путем написания динамического IL
- с помощью
Expression
в .NET 3.5
И, конечно, любой такой код должен кэшироваться и использоваться повторно (вы не хотите компилировать + выполнять для каждого вызова; только первый - остальные должны просто выполняться).
Или есть библиотеки, которые абстрагируют это; например, HyperPropertyDescriptor оборачивает пользовательский IL (для доступа к элементу) в привычный PropertyDescriptor
API - делая это очень быстро, но безболезненно. Ваш вопрос упоминает таблицы данных и сущности; который звучит лот как этот предыдущий вопрос , где я сделал некоторые метрики, используя HyperDescriptor, со сводкой (в миллисекундах):
Vanilla 27179
Hyper 6997
Итак, мой "дубль":
- в приложении ; очень мало - в крайнем случае, обычно
- в вашей общей библиотеке / библиотеках ; при необходимости (отмечая, что интерфейсы и т. д. предпочтительнее, где это возможно)