【问题标题】:Why dependency properties?为什么依赖属性?
【发布时间】:2010-12-15 23:26:03
【问题描述】:

为什么微软走的是制作依赖属性和依赖对象的路线,而不是使用反射和属性?

【问题讨论】:

  • 那么依赖属性的默认值存储在哪里。他们也在消耗内存,不是吗?另外,如果我们更改文本框控件的“文本”dp,那么更改后的值将仅存储在该对象(特定文本框)的哈希表中吗?如果是这种情况,那么默认值+更改值..内存加倍..ufff。让我知道你的看法,问候 Rakesh www.qtricks.com
  • @Rajesh Kumar:默认值是静态存储的。因此减少了占用空间,因为您对所有实例只有一个值。

标签: wpf silverlight dependency-properties


【解决方案1】:

这帮助我理解了推理:

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

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

依赖属性的优点如下:

减少内存占用

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

值继承

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

更改通知

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

发件人:WPF Tutorials

【讨论】:

  • 感谢您的出色回答。即使在阅读了所有关于 DPs 的 MSDN 文档之后,在阅读您的回复之前,我仍然有些困惑。
【解决方案2】:

Dependency properties 解决了与反射和属性解决方案不同的使用场景。

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

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多