Wpf 为什么是依赖属性?

Wpf 为什么是依赖属性?,wpf,silverlight,dependency-properties,Wpf,Silverlight,Dependency Properties,为什么Microsoft选择创建依赖属性和依赖对象,而不是使用反射和属性?这有助于我理解其中的原因: 主要区别在于,普通.NET属性的值是从类中的私有成员直接读取的,而DependencyProperty的值是在调用从DependencyObject继承的GetValue()方法时动态解析的 设置依赖项属性的值时,它不会存储在对象的字段中,而是存储在基类DependencyObject提供的键和值字典中。条目的键是属性的名称,值是要设置的值 依赖项属性的优点如下: 减少内存占用 当您认为UI控件

为什么Microsoft选择创建依赖属性和依赖对象,而不是使用反射和属性?

这有助于我理解其中的原因:

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

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

依赖项属性的优点如下:

减少内存占用

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

值继承

访问依赖项属性时,将使用值解析策略解析该值。如果未设置任何本地值,则dependency属性将向上导航逻辑树,直到找到值为止。在根元素上设置FontSize时,它将应用于下面的所有文本块,但覆盖该值的情况除外

更改通知

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

From:。

解决不同于反射和属性解决的使用场景

依赖项属性为标准属性无法处理的事情提供了一个单一、一致的API

  • 允许类在不增加开销的情况下提供大量属性(因为它们仅在使用时静态创建,而不是每个类一次)。为了
  • 依赖属性系统以标准依赖属性的一致方式处理类似的事情
  • 依赖项属性为提供了一个干净的API
  • 依赖项属性提供
  • 依赖项属性在数据绑定时提供

谢谢你的回答。即使在阅读了所有关于DPs的MSDN文档之后,我仍然有点困惑,直到我阅读了您的回复。那么依赖属性的默认值存储在哪里呢。他们也在消耗内存,不是吗?另外,如果我们更改textbox控件的“Text”dp,那么更改后的值将仅存储在该对象(特定textbox)的哈希表中?如果是这种情况,则默认值+更改值..加倍内存..ufff。让我知道你的观点,Rakesh www.qtricks。com@RajeshKumar:默认值是静态存储的。因此减少了占用空间,因为所有实例只有一个值。