2011-04-10 99 views
10

为什么依赖属性是静态的,这个问题仍然在我心中很清楚,我就是为什么我们需要使用只读关键字属地财产申报的时间。为什么依赖属性被声明为静态只读?

+0

只是看看这个http://stackoverflow.com/questions/2989431/why-dependency-properties-are-static – 2011-04-11 04:09:46

回答

3

从概念上讲,依赖项属性是依赖项对象只是具有的内容,而不依赖于何时使用该属性。就像一个CLR属性,如果你问这是否对象有Total属性,你就知道它不能是现在double而是int以后。因此,如果可以的话,我们将依赖项属性const,但我们不能,所以readonly是次好的。

使用readonly关键字至少有三个作用:

  • 它通知码的读者,价值不会改变
  • 它可以防止笔者意外更改
  • 它协助价值编译器,它知道什么时候事情不会改变
+0

是的,理解。但是如果我声明它不是只读的,并且出于某种原因我想在运行时动态地更改此属性,那么可能吗?或者对于这种情况有更好的解决方案? – zinking 2013-06-21 10:27:18

1

因为它使明显,这个属性的值初始化后不能更改。

1

希望这将有助于:Silverlight.net forums: DependencyProperty - public static readonly?

引述:

“公共静态只读”是来自注册回调领域。该字段是属性的标识符。你只需要标识符,这样Silverlight属性系统就知道该怎么做,并且可以在定义依赖属性的CLR“包装器”时自己使用属性系统。一旦你有了包装,该物业的所有进一步使用可以像典型的财产一样使用它。

公共使所有财产的系统调用,包括跨组件能够访问它。

静态和只读的,因为这不是应该永远改变的定义;房产系统需要获得一致的结果。

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

相关问题