为什么依赖属性是“静态”的?

15

请问为什么依赖属性要声明为静态的?

2个回答

14
当您声明一个DependencyProperty时,您声明的是该属性的定义,而不是该属性值的存储空间(与常规属性声明情况下的情况相反)。整个类中只有一个属性定义,而不是每个类实例都有一个定义,因此它是静态的。

6
任何具有“DependencyProperty”的对象都派生自类型“DependencyObject”。一个“DependencyObject”的实例包括一个属性包 - 基本上是映射到值的属性名称字典 - 并且设置任何“DependencyProperty”的值存储在该包中。 - Dan Puzey

12

你声明为 static 的字段只是依赖属性的 标识符,而不是属性的 。它在类的所有实例之间共享,并用于为每个实例获取/设置属性的值。


我有一些要求,需要将DP设置为静态,因为我想在所有实例之间共享它。这是可能的吗? - Rohit Vats
@ThomasLevesque:说真的,我无法理解你的陈述的意义或合理性,也不知道你想表达什么。虽然我是新手,但我不明白你的话。如果它是静态的,为什么我们要为每个实例设置值呢?静态意味着在整个程序生命周期中只调用一次,对吧。 - Jasmine
1
@Divine,我不确定我理解你的问题... 一个依赖属性由标识符字段(例如TextBox.TextProperty)定义,该字段是静态的。 要获取给定实例的属性值,您可以在实例上调用GetValue(TextProperty);为了使事情更容易,大多数DP都有一个作为快捷方式的实例属性(例如TextBox.Text)。 - Thomas Levesque
顺便说一句,仅仅因为你不理解我的答案就对其进行负评并没有什么用处... - Thomas Levesque
@ThomasLevesque:我又点了赞 :) 但是它说我的投票被锁定了。我不知道该怎么办。嗯,恐怕我还是没懂什么。不过,我会通过一些视频来进行阅读。感谢你的帮助,伙计。 - Jasmine
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接