Почему .NET WPF DEVELYPROPERTIES должны быть статичными членами класса

StackOverflow https://stackoverflow.com/questions/36682

  •  09-06-2019
  •  | 
  •  

Вопрос

Изучение WPF в наши дни. Нашел что -то новое сегодня со свойствами зависимости .NET. То, что они приносят на стол, это

  • Поддержка обратных вызовов (валидация, изменения и т. Д.)
  • Наследство собственности
  • Прилагаемые свойства

среди других.

Но мой вопрос здесь в том, почему они должны быть объявлены статичными в содержащемся классе? Рекомендуемый способ - добавить для них свойство «обертка» экземпляра. Почему ?

РЕДАКТИРОВАТЬ: @matt, но разве это также не требует, чтобы значение недвижимости также разделяется по случаям - если, конечно, это не полученное значение?

Это было полезно?

Решение

Я вижу 2 причины этого требования:

  1. Вы не можете зарегистрировать один и тот же DP дважды. Чтобы соблюдать это ограничение, вы должны использовать статическую переменную, она будет инициализирована только один раз, поэтому вы зарегистрируете DP только один раз.
  2. DP должен быть зарегистрирован перед любым классом (который использует этот экземпляр DB)

Другие советы

Свойства зависимости являются статическими из -за ключевой оптимизации в WPF: многие элементы управления в WPF имеют десятки, если не сотни свойств. Большинство свойств в этих классах устанавливаются на их значение по умолчанию. Если бы DP были свойствами экземпляра, память должна была быть выделена для каждого свойства в каждом объекте, который вы создаете. Поскольку DP являются статичными, WPF может более эффективно управлять использованием памяти каждого свойства.

Причина, по которой вы должны предоставить значение по умолчанию для любого DP, который вы регистрируете, заключается в том, что WPF будет позаботиться о том, чтобы не выделять дополнительную память для вашего свойства, когда оно будет установлено на его значение по умолчанию, независимо от того, сколько объектов, содержащих это свойство, вы создаете.

Я думаю, что причина, по которой вам нужен статический экземпляр свойства зависимости, на самом деле только потому, что именно так они были спроектированы. Статический бит содержит все метаданные свойства - его значение по умолчанию, тип владельца (удобно, если это прикрепленное свойство) и т. Д., Его методы обратного вызовов, когда он меняется - таковые. Имеет смысл хранить эти вещи статически во всех случаях класса, а не для каждого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top