Wpf 为什么依赖项属性声明为静态只读?

Wpf 为什么依赖项属性声明为静态只读?,wpf,dependency-properties,Wpf,Dependency Properties,我很清楚为什么依赖项属性是静态的,而我脑海中仍然存在的问题是,为什么在声明依赖项属性时需要使用Readonly关键字。因为很明显,初始化后无法更改此属性的值。希望这会有所帮助: 引述: “publicstaticreadonly”是从Register调用返回的字段。字段是属性的标识符。您只需要标识符,以便Silverlight属性系统知道该做什么,并且在定义依赖项属性的CLR“包装器”时可以自己使用属性系统。一旦有了包装器,所有进一步使用该属性的方法都可以像使用典型属性一样使用它 公共,以便包括

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

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

希望这会有所帮助:

引述:

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

公共,以便包括交叉程序集在内的所有属性系统调用都可以访问它

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

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


从概念上讲,依赖项属性是依赖项对象所拥有的,并且不依赖于您使用该属性的时间。就像CLR属性一样,如果你问这个对象是否有
Total
属性,你就会知道它现在不能是
double
,而是
int
以后的属性。因此,如果可以的话,我们会使依赖属性
const
,但我们不能,因此
readonly
是次好的选择

使用
readonly
关键字至少有三种效果:

  • 它通知代码的读者该值不会更改
  • 它可以防止作者意外更改值
  • 它帮助编译器,这得益于知道什么时候事情不会改变

看看这个就知道了。但是,如果我声明它不是只读的,并且出于某种原因我确实希望在运行时动态地更改此属性,那么这可能吗?或者对于这种情况,有更好的解决方案吗?这里的
只读
仅与依赖项属性标识符相关,该标识符以单词
属性
结尾。这并不意味着依赖项属性的值不能更改。只有此标识符不能更改。此依赖项属性标识符用作
DependencyObject
类中键的一部分,以获取和设置属性的实际值。