2013-10-18 47 views
14

为什么一个依赖属性必须是静态的?为什么依赖属性必须是静态

我已经看到它已经在这里发布了一些帖子,但我无法正确理解它。

如果有人能够帮助我理解一个小片段,那将会很棒。

+0

[非静态依赖属性]的可能的重复(http://stackoverflow.com/questions/3660696/non-static-dependency-properties) –

+0

在上述问题的答案的解释是相当基本的,请阅读基础知识后,我们可以辩论约束条件是否有效。 –

+0

@ M.Babcock:这就是我在描述中所说的,我已经看到了几个解释但并不全面。我已经看到你在这里写我的问题之前给的链接,并且,还有我也看到了这一点http://stackoverflow.com/questions/2989431/why-are-dependency-properties-static – Learner

回答

25

这里的奇妙之处在于,DependencyProperty的声明是static而不是它的value(即存储器存储)。您使用static关键字添加的声明仅仅是DependencyObjectDependencyProperty的标识符,因为相同的标识符将由该DependencyObject的所有实例共享以标识该属性,因此将其设置为static是有意义的。

在另一方面,当你调用SetValueDependancyObject实例上设置的DependancyProperty的值,然后在其上调用setValue的DependancyObject每个实例都将存储属性的本地值。这是由DependancyObject类保持排序的Dictionary其具有DependancyProperty标识符和局部值之间的映射内部处理。

+0

非常感谢你Nit,这对我有很大的帮助。我也在寻找一些可以更好地理解它的好的片段。 – Learner

+0

我不明白这一行 - “相同的标识符将被该依赖对象的所有实例共享”如果你可以请解释我,这将是非常好的,我是编程新手:( – Learner

+1

,你可以把它作为关键的keyvaluepair字典的那个DependancyObject具有存储依赖属性的值。由于每个实例可以拥有的属性不同的值,而是确定我们不需要不同的密钥该值,因为每个实例的值将对应于相同的密钥。 。因此,它是静态的 – Nitin

5

的DependencyProperty必须是静态(类级别),因为当我们创建具有该属性的类的多个对象,并想引用该属性的值必须来自的DependencyProperty的静态实例的默认值。因此,我们类的所有实例的默认值都是相同的,系统不会为该类的每个实例的DependencyProperty保留内存。 这样可以减少内存占用。

现在,下一个问题出现,如果我们明确地设置的DependencyProperty的值类的对象。(代码或动画或样式)

在这种情况下的DependencyObject进入图片。任何具有DependencyProperty的类都必须从DependencyObject类(WPF特定类派生,该类维护名为EffectiveValues的集合)。当用户在类的对象上(通过代码或动画或样式)将DependencyProperty的值明确设置为该值时,该值将存储在驻留在DependencyObject类内的那个EffectiveValues集合中,并在那里保留内存。

+0

很好的回答;然而,DependencyObject不是WPF特定的类 - 它也可以在Silverlight和WinRT中使用。 –

相关问题