需要一个简短明确的"依赖属性"定义

And*_*rey 17 c# wpf dependency-properties

我正在试图找出究竟是什么依赖属性,但当我在任何地方查找定义时,我只找到"如何使用"而不是"它是什么".想象一下,在面试时会被问到 - 什么是依赖财产.你的答案是什么?

Gab*_*abe 17

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

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

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

  • 它可以实现附加属性.像属性Canvas.LeftGrid.Row必须被存储在那些从未听说过的对象CanvasGrid,所以你在哪里放呢?你把它们放在某个地方的数据库中.

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