Подтвердить что ты не робот

Разница между отражением ComponentModel (например, PropertyDescriptor) и стандартным отражением (например, PropertyInfo)?

Существует четкое совпадение между тем, что вы можете сделать с обоими из них. Является ли компонент ComponentModel отражением только немного более дружественного слоя поверх System.Reflection?

4b9b3361

Ответ 1

Нет - больше. ComponentModel позволяет вам делать несколько вещей типа DLR, например, свойства runtime. Вот как DataView предоставляет столбцы сетке - они не являются свойствами отражения - они являются свойствами времени выполнения. Ключевые слова: ICustomTypeDescriptor и TypeDescriptionProvider.

Эта модель также позволяет абстракции и косвенности. Например, если вы много размышляете о свойствах, рассмотрите HyperDescriptor - это утилита, которую я написал, которая использует пользовательскую реализацию PropertyDescriptor для замены модели отражения для предварительно скомпилированной модели, для увеличения производительности.

В терминах использования существуют некоторые другие различия; ComponentModel поддерживает только один экземпляр любого атрибута для члена (в отличие от отражения, где допускаются множественные одинаковые атрибуты). И он ориентирован на данные - поэтому существуют свойства, а также события (в основном предназначенные для уведомления об изменении), но нет полей и методов.

Он также имеет хорошую поддержку для i18n - так как DisplayName и т.д. можно настроить на лету.

Однако ComponentModel не (напрямую) совместим с такими вещами, как LINQ (в частности, MemberExpression) - поскольку он хочет привязать данные отражения.

Наконец, ComponentModel очень часто используется в среде IDE такими вещами, как PropertyGrid (так работают такие вещи, как дополнительные свойства для подсказок), но в равной степени почти вся привязка данных пользовательского интерфейса происходит через ComponentModel (поскольку это позволяет привязку к поддержке DataTable, классы и все, что вы можете придумать).