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