Почему свойство Dependency объявлено как статическое только для чтения? - PullRequest
10 голосов
/ 10 апреля 2011

Мне понятно, почему свойство зависимостей является статическим, и до сих пор у меня остается вопрос, почему мы должны использовать ключевое слово Readonly во время объявления свойства зависимости.

Ответы [ 3 ]

3 голосов
/ 10 апреля 2011

Концептуально свойство зависимости - это то, что просто имеет объект зависимости, и это не зависит от того, когда вы используете это свойство. Точно так же, как свойство CLR, если вы спросите, есть ли у этого объекта свойство Total, вы знаете, что оно может быть не double сейчас, а int позже. В результате мы бы установили свойство зависимости const, если бы могли, но не можем, поэтому readonly - это следующая лучшая вещь.

Использование ключевого слова readonly имеет как минимум три эффекта:

  • информирует читателей кода о том, что значение не изменится
  • предотвращает случайное изменение значения автором
  • он помогает компилятору, который выигрывает от знания, когда все не изменится
1 голос
/ 10 апреля 2011

Надеюсь, это поможет: Форумы Silverlight.net: DependencyProperty - общедоступная статическая только для чтения?

Цитата:

"Общедоступная статическая только для чтения"поле, которое возвращается из регистрации вызова.Поле является идентификатором для свойства.Вам действительно нужен только идентификатор, чтобы система свойств Silverlight знала, что делать, и чтобы вы могли использовать систему свойств самостоятельно, когда определяете «оболочку» CLR свойства зависимостей.Если у вас есть оболочка, все дальнейшее использование свойства может использовать его как обычное свойство.

Public, чтобы все системные вызовы свойства, включая перекрестную сборку, могли получить к нему доступ.

Статические итолько для чтения, потому что это определение не должно меняться;система свойств должна получать согласованные результаты.

В присоединенном случае свойства вы хотите, чтобы был класс "owner".Класс владельца должен быть классом, который вызывает RegisterAttached, и AND также должен определять статические методы доступа (Get * и Set *), чтобы синтаксический анализатор XAML знал, что делать, когда вы пытаетесь установить присоединенное свойство для экземпляра DependencyObject.Так что это немного по-другому, потому что для присоединенного свойства обычно нет «оболочки», любой доступ к коду просто использует методы доступа Get * и Set *.

1 голос
/ 10 апреля 2011

Поскольку очевидно, что значение этого свойства нельзя изменить после инициализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...