为何依赖属性?

Mr *_*ell 41 silverlight wpf dependency-properties

为什么微软会采用依赖属性和依赖对象的方式而不是使用反射和属性?

Kyl*_*ndo 65

这有助于我理解这个推理:

主要区别在于,正常.NET属性的值是直接从类中的私有成员读取的,而DependencyProperty的值是在调用从DependencyObject继承GetValue()方法动态解析的.

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

依赖属性的优点如下:

减少内存占用

当您认为UI控件的90%以上的属性通常保持其初始值时,为每个属性存储字段是一个巨大的耗散.依赖项属性仅通过在实例中存储已修改的属性来解决这些问题.默认值在依赖项属性中存储一次.

价值继承

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

更改通知

依赖项属性具有内置的更改通知机制.通过在属性元数据中注册回调,您可以在更改属性的值时收到通知.这也被数据绑定使用.

来自:WPF教程.


Ree*_*sey 8

依赖属性解决了与反射和属性将解决的不同的使用场景.

依赖属性为标准属性无法处理的事物提供单一,一致的API.

  • 允许类提供大量属性而没有开销(因为它们仅在创建时静态创建,在使用时不是每个类创建一次).对于
  • 依赖项属性系统以与标准依赖项属性一致的方式处理诸如附加属性之类的内容.
  • 依赖属性为变更跟踪和验证提供了一个干净的API .
  • 依赖项属性提供属性值继承.
  • 在绑定数据时,依赖项属性可提供出色的性能优势.