为什么依赖属性?

为什么微软去做依赖属性和依赖对象的路线,而不是使用reflection和可能的属性?

这帮助我理解了这个推理:

主要区别在于正常.NET属性的值直接从类中的私有成员中 读取 ,而调用从DependencyObjectinheritanceGetValue()方法时, DependencyProperty的值将被dynamicparsing

设置依赖属性的值时,不会将其存储在对象的字段中,而会存储在由基类DependencyObject提供的键和值字典中 。 条目的关键是属性的名称,值是您要设置的值。

依赖属性的优点如下:

减less内存占用

如果您认为UI控件的90%以上属性通常保持初始值,那么为每个属性存储一个字段是一个巨大的消耗。 依赖属性通过只在实例中存储修改的属性来解决这些问题。 默认值在依赖项属性中存储一次。

价值inheritance

访问依赖项属性时,通过使用值parsing策略来解决该值。 如果未设置本地值,则依赖项属性将导航到逻辑树,直到find值。 当您在根元素上设置FontSize时,它将应用于下面的所有文本块,除了覆盖该值。

更改通知

依赖属性具有内置的更改通知机制。 通过在属性元数据中注册callback,当属性的值发生变化时,您会收到通知。 这也被数据绑定使用。

来自: WPF教程 。

依赖属性解决不同的使用场景,而不是reflection,属性将解决。

依赖属性为标准属性无法处理的事情提供了一个统一的API。

  • 允许类提供大量的属性而没有开销(因为它们只在静态使用时创build,而不是每个类创build一次)。 对于
  • 依赖项属性系统以一致的方式处理像附加属性这样的标准依赖项属性。
  • 依赖属性为更改跟踪和validation提供了一个干净的API。
  • 依赖属性提供了属性值的inheritance 。
  • 数据绑定时,依赖属性提供了很好的性能优势 。