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