我清楚为什么依赖属性是静态的,但我仍然想知道为什么在声明依赖属性时需要使用只读关键字。
我清楚为什么依赖属性是静态的,但我仍然想知道为什么在声明依赖属性时需要使用只读关键字。
在概念上,依赖属性是依赖对象所拥有的并且不依赖于您使用该属性的时间。就像CLR属性一样,如果您询问此对象是否具有“Total”属性,则现在它不能是double类型,但以后可以是int类型。因此,如果我们可以,我们会将依赖属性设置为const,但我们无法这样做,因此readonly是次佳选择。
使用readonly关键字至少具有三个效果:
readonly
只与以Property
结尾的依赖属性标识符有关,这并不意味着依赖属性的值不能更改。仅此标识符是不可更改的。这个依赖属性标识符被用作DependencyObject
类中键的一部分,以获取和设置属性的实际值。 - Sheridan因为它明确表明,该属性的值在初始化后无法更改。
希望这可以帮到你:Silverlight.net论坛:DependencyProperty - public static readonly?
引用一下:
"public static readonly"是从Register调用返回的字段。该字段是属性的标识符。您只需要标识符,以便Silverlight属性系统知道该做什么,并且在定义依赖属性的CLR“包装器”时可以自己使用属性系统。一旦您拥有了包装器,所有进一步使用属性的使用都可以像典型的属性一样使用。
公共的,以便所有属性系统调用,包括跨程序集访问它。
静态和只读,因为这不应该更改的定义;属性系统需要获得一致的结果。
在附加属性的情况下,您希望有一个“所有者”类。所有者类必须是调用RegisterAttached的类,并且还必须定义静态访问器方法(Get *和Set *),以便XAML解析器知道在尝试在DependencyObject实例上设置附加属性时该怎么做。因此,它有点不同,因为对于附加属性,通常没有“包装器”,任何代码访问都只使用Get *和Set *访问器。