需要“依赖属性”的简短而清晰的定义

2024-06-18

我试图弄清楚依赖属性到底是什么,但是当我在任何地方寻找定义时,我只找到“如何使用”而不是“它是什么”。 想象一下,您在面试时被问到 - 什么是依赖属性。你的答案是什么?


DependencyProperty 是一个属性,其值取决于(或可以取决于)某些其他源(例如动画、数据绑定、样式或可视化树继承)。常规属性的值存储在它所属的对象中,而您可以将依赖属性视为存储在数据库中的某个位置。该数据库本质上由映射的字典组成(对象、属性)它们的值对,以及哪些属性依赖于其他属性的映射(例如,当您更改面板的 DataContext 时,它可以通知面板内的所有子级)。

那么为什么他们将属性值存储在某个神奇的数据库中呢?有以下几个原因:

  • 它减少了存储空间。向类添加属性(即使其值为 null)会为该类的每个实例添加 4 个字节(对于 64 位进程为 8 个字节)的空间。仅当实例具有值时,DependencyProperty 才会占用空间。例如,FrameworkElement 具有数十个依赖属性,其中大多数从未分配值。如果所有这些属性都存储在类中,则每个实例将有数百个字节。相反,每个实例只有大约 40 个字节。

  • 它启用附加属性。属性如Canvas.Left and Grid.Row必须存储在从未听说过的对象上Canvas or Grid,那么你把它们放在哪里呢?你把它们放在数据库的某个地方。

  • 它支持自动属性更改。想象一下您将如何实现样式或属性继承之类的东西(能够在父元素上设置字体或数据上下文之类的东西,并将其值传播到所有子元素)。将所有这些存储在数据库中使得代码全部集中在一个位置,而不是为需要它的每个对象和属性单独实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要“依赖属性”的简短而清晰的定义 的相关文章

随机推荐