回答
这里的奇妙之处在于,DependencyProperty
的声明是static
而不是它的value
(即存储器存储)。您使用static
关键字添加的声明仅仅是DependencyObject
的DependencyProperty
的标识符,因为相同的标识符将由该DependencyObject的所有实例共享以标识该属性,因此将其设置为static
是有意义的。
在另一方面,当你调用SetValue
上DependancyObject
实例上设置的DependancyProperty
的值,然后在其上调用setValue的DependancyObject
每个实例都将存储属性的本地值。这是由DependancyObject
类保持排序的Dictionary
其具有DependancyProperty
标识符和局部值之间的映射内部处理。
的DependencyProperty必须是静态(类级别),因为当我们创建具有该属性的类的多个对象,并想引用该属性的值必须来自的DependencyProperty的静态实例的默认值。因此,我们类的所有实例的默认值都是相同的,系统不会为该类的每个实例的DependencyProperty保留内存。 这样可以减少内存占用。
现在,下一个问题出现,如果我们明确地设置的DependencyProperty的值类的对象。(代码或动画或样式)
在这种情况下的DependencyObject进入图片。任何具有DependencyProperty的类都必须从DependencyObject类(WPF特定类派生,该类维护名为EffectiveValues的集合)。当用户在类的对象上(通过代码或动画或样式)将DependencyProperty的值明确设置为该值时,该值将存储在驻留在DependencyObject类内的那个EffectiveValues集合中,并在那里保留内存。
很好的回答;然而,DependencyObject不是WPF特定的类 - 它也可以在Silverlight和WinRT中使用。 –
- 1. 目标属性必须是依赖属性 - 为什么?
- 2. 为什么依赖属性是“静态的”?
- 3. 为什么依赖属性被声明为静态只读?
- 4. 为什么依赖属性?
- 5. 非静态依赖项属性
- 6. 什么是WPF中的依赖属性
- 7. 为什么ClassInitialize方法必须是静态的?
- 8. 为什么委托必须是静态的?
- 9. 为什么operator()[] - > =必须是非静态成员?
- 10. 为什么C#运算符重载必须是静态的?
- 11. 为什么.Net WPF DependencyProperties必须是类的静态成员
- 12. 为什么数据库名称必须是静态的?
- 13. 抛出一个异常,为什么它必须是静态的?
- 14. 为什么私有静态属性为
- 15. 什么是“TemplatedParent模板属性”依赖项属性优先
- 16. KindError:属性r必须是SecondModel的实例,为什么?
- 17. 是否有可能拥有共享/静态依赖属性?
- 18. 为什么jsp中的EL函数必须声明为静态?
- 19. 必须设置WPF UserControl的依赖项属性的警报?
- 20. 必须不同的两个UserControl依赖项属性
- 21. 什么是依赖属性?它有什么用途?
- 22. 为什么我必须把这个功能静态
- 23. 为什么静态成员必须在main()之外初始化?
- 24. 解决BeautifulSoup依赖性时,“TypeError:dist必须是分发实例”
- 25. ListView.View是依赖属性
- 26. 依赖属性
- 27. 依赖属性
- 28. 注册属性作为依赖属性
- 29. 为什么Main必须是静态的才能接受命令行参数?
- 30. 为什么const类成员必须是静态的才能正确优化?
[非静态依赖属性]的可能的重复(http://stackoverflow.com/questions/3660696/non-static-dependency-properties) –
在上述问题的答案的解释是相当基本的,请阅读基础知识后,我们可以辩论约束条件是否有效。 –
@ M.Babcock:这就是我在描述中所说的,我已经看到了几个解释但并不全面。我已经看到你在这里写我的问题之前给的链接,并且,还有我也看到了这一点http://stackoverflow.com/questions/2989431/why-are-dependency-properties-static – Learner