Почему свойство 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 *.

Другие вопросы по тегам