为什么Dependency属性被声明为静态只读?

时间:2011-04-10 05:23:22

标签: wpf dependency-properties

我很清楚为什么依赖属性是静态的,问题仍然存在,这就是为什么我们需要在声明依赖属性时使用Readonly关键字。

3 个答案:

答案 0 :(得分:3)

从概念上讲,依赖项属性是依赖项对象所具有的,并且不依赖于何时使用该属性。就像CLR属性一样,如果您要求此对象具有Total属性,您知道它现在不能是double,而是int之后。const。因此,如果可以的话,我们会创建依赖属性readonly,但我们不能,因此readonly是最好的选择。

使用{{1}}关键字至少有三种效果:

  • 告知读者代码值不会改变
  • 它可以防止作者意外更改值
  • 它协助编译器,这可以从知道什么时候不会改变
  • 中获益

答案 1 :(得分:1)

因为它很明显,初始化后无法更改此属性的值。

答案 2 :(得分:1)

希望这会有所帮助:Silverlight.net forums: DependencyProperty - public static readonly?

引用:

  

“public static readonly”是从Register调用返回的字段。该字段是属性的标识符。您只需要标识符,以便Silverlight属性系统知道该怎么做,以便您可以在定义依赖项属性的CLR“包装器”时自己使用属性系统。一旦你有了包装器,所有进一步使用该属性就可以像典型的属性一样使用它。

     

公开,以便包括交叉汇编在内的所有属性系统调用都可以访问它。

     

静态和只读,因为这不是一个应该改变的定义;财产制度需要得到一致的结果。

     

在附加属性的情况下,您希望有一个“所有者”类。所有者类必须是调用RegisterAttached的类,并且还必须定义静态访问器方法(Get *和Set *),以便当您尝试在DependencyObject实例上设置附加属性时,XAML解析器知道该怎么做。所以它有点不同,因为对于附加属性通常没有“包装器”,任何代码访问只使用Get *和Set *访问器。