Нет - есть еще. ComponentModel позволяет вам делать несколько вещей типа DLR, таких как свойства времени выполнения. Вот как DataView предоставляет столбцы в сетку - они не являются свойствами отражения - они являются свойствами времени выполнения. Ключевые слова здесь ICustomTypeDescriptor
и TypeDescriptionProvider
.
Эта модель также допускает абстракцию и косвенность. Например, если вы много размышляете о свойствах, рассмотрите HyperDescriptor - это утилита, которую я написал, которая использует собственную реализацию PropertyDescriptor
для замены модели отражения на предварительно скомпилированную модель, для огромный рост производительности.
С точки зрения использования, есть некоторые другие различия; ComponentModel поддерживает только один экземпляр любого атрибута на элементе (в отличие от отражения, где допускается несколько одинаковых атрибутов). И он ориентирован на данные - поэтому существуют свойства, как и события (в первую очередь предназначенные для уведомления об изменениях), но нет ни полей, ни методов.
Он также имеет хорошую поддержку i18n - поскольку DisplayName и т. Д. Можно настраивать на лету.
Однако ComponentModel (напрямую) не совместим с такими вещами, как LINQ (в частности, с MemberExpression) - так как это требует привязки к данным отражения.
Наконец, ComponentModel широко используется в IDE такими вещами, как PropertyGrid (именно так работают такие вещи, как дополнительные свойства для подсказок), но в равной степени почти вся привязка данных пользовательского интерфейса происходит через ComponentModel (поскольку это позволяет связыванию поддерживать DataTable, классы и все, что только можно придумать).