现在学习WPF.今天发现了一些新的.Net依赖属性.他们带来的是什么
支持回调(验证,更改等)
财产继承
附属物
等等.
但我的问题是为什么它们需要在包含类中声明为静态?推荐的方法是为它们添加实例'wrapper'属性.为什么?
编辑:@Matt,但是这也不是要求在实例之间共享属性值 - 除非它当然是派生值?
由于WPF中的密钥优化,依赖属性是静态的:WPF中的许多控件都有数十个(如果不是数百个)属性.这些类中的大多数属性都设置为其默认值.如果DP是实例属性,则需要为您创建的每个对象中的每个属性分配内存.由于DP是静态的,因此WPF可以更有效地管理每个属性的内存使用情况.
为什么你应该为你注册任何DP提供一个默认值的原因是因为WPF会照顾不来,当它被设置为默认值,无论有多少包含对象所创建的属性你的财产分配额外的内存.
我认为你需要依赖属性的静态实例的原因实际上只是因为它们是如何设计的.静态位保存所有属性元数据 - 它的默认值,它的所有者类型(如果它是附加属性则很方便)等,它的变换时的回调方法 - 那种东西.将这些东西静态地存储在类的所有实例而不是每个实例中是有意义的.