Мне ясно, почему свойство зависимостей статично, и вопрос по-прежнему остается в моем сознании, поэтому нам нужно использовать ключевое слово Readonly во время объявления свойства зависимостей.
Почему свойство Dependency объявлено как static readonly?
Ответ 1
Концептуально свойство зависимостей - это то, что просто объект зависимостей, и который не зависит от того, когда вы используете свойство. Как и свойство CLR, если вы спросите, имеет ли этот объект свойство Total
, вы знаете, что он не может быть double
теперь, но int
позже. В результате мы сделали бы свойство зависимостей const
, если бы смогли, но мы не можем, поэтому readonly
является следующим лучшим.
Использование ключевого слова readonly
имеет как минимум три эффекта:
- он сообщает читателям кода, что значение не изменится
- он не позволяет автору случайно изменить значение
- он помогает компилятору, который извлекает выгоду из знания, когда что-то не изменится.
Ответ 2
Поскольку это делает очевидным, что значение этого свойства не может быть изменено после инициализации.
Ответ 3
Надеюсь, это помогло бы: Форумы Silverlight.net: DependencyProperty - public static readonly?
Цитата:
"public static readonly" - это поле, которое возвращается из вызова Register. Поле является идентификатором свойства. Вам действительно нужен только идентификатор, чтобы система свойств Silverlight знала, что делать, и чтобы вы могли использовать систему свойств самостоятельно, когда вы определяете свойство CLR зависимостей "оболочка". После того, как у вас есть оболочка, все дальнейшее использование свойства может просто использовать его как типичное свойство.
Публикация, чтобы все вызовы системной системы, включая кросс-сборку, могли получить к ней доступ.
Статический и readonly, потому что это не определение, которое должно когда-либо изменяться; система собственности должна получать согласованные результаты.
В случае с прикрепленным имуществом вы хотите, чтобы был класс "владелец". Класс владельца должен быть классом, который вызывает RegisterAttached, а также должен определять методы статического доступа (Get * и Set *), чтобы анализатор XAML знал, что делать, когда вы пытаетесь установить вложенное свойство на экземпляр DependencyObject. Так что это немного отличается, потому что для прикрепленного свойства обычно не является "оберткой", любой доступ к коду использует только аксессоры Get * и Set *.