Lea*_*ner 18 .net c# wpf dependency-properties c#-4.0
为什么依赖属性必须是静态的?
我已经看到它已经在这里的一些帖子中被问到了,但我无法正确理解它.
如果有人可以通过一个小片段帮助我理解它会很棒.
Nit*_*tin 27
这里神奇的是,声明DependencyProperty是static不是它value(即存储器).使用static关键字添加的声明只是DependencyPropertyfor 的标识符,DependencyObject因为相同的标识符将由该DependencyObject的所有实例共享以标识属性,因此它有意义static.
另一方面,当您DependancyProperty通过调用SetValueon DependancyObject实例设置值时,调用DependancyObjectsetvalue的每个实例将存储其Property的本地值.这由DependancyObject类内部处理,该类维护的类Dictionary具有DependancyProperty标识符和本地值之间的映射.
DependencyProperty必须是静态的(类级别),因为当我们创建具有该属性的类的多个对象并且想要引用该属性的默认值时,该值必须来自DependencyProperty的静态实例.因此,我们类的所有实例的默认值都是相同的,并且系统不会在该类的每个实例上为DependencyProperty保留内存.这样可以减少内存占用.
现在,下一个问题出现了,如果我们为类的对象显式设置DependencyProperty的值(通过代码或动画或样式)
在这种情况下,DependencyObject进入图片.任何具有DependencyProperty的类都必须从DependencyObject类派生(WPF特定的类,它维护一个名为EffectiveValues的集合).当用户在类的对象上显式设置DependencyProperty的值时(通过代码或通过动画或样式),该值存储在驻留在DependencyObject类中的EffectiveValues集合中,并在那里保留内存.