Почему свойства зависимостей в WPF должны быть статическими - программирование
Подтвердить что ты не робот

Почему свойства зависимостей в WPF должны быть статическими

Почему свойство зависимостей должно быть Static?

Я видел, что его уже спрашивали в каком-то посте здесь, но я не могу его правильно понять.

Будет здорово, если кто-то может помочь мне понять и небольшим фрагментом.

4b9b3361

Ответ 1

Магия здесь, объявление DependencyProperty есть static не его value (то есть память). Объявление, которое вы добавляете с ключевым словом static, является только идентификатором DependencyProperty для DependencyObject, потому что тот же идентификатор будет использоваться всеми экземплярами этого DependencyObject для идентификации свойства, поэтому имеет смысл сделать его static.

С другой стороны, когда вы устанавливаете значение DependancyProperty, вызывая экземпляр SetValue on DependancyObject, тогда каждый экземпляр DependancyObject, на который вызывается setvalue, сохранит свое локальное значение свойства, Это обрабатывается внутри класса DependancyObject, который поддерживает вид Dictionary, который имеет сопоставление между идентификатором DependancyProperty и локальным значением.

Ответ 2

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

Теперь возникает следующий вопрос: если мы явно задаем значение DependencyPropertys для объектов класса (по коду или по анимации или по стилю)

В этом случае на изображение появляется DependencyObject. Любой класс, имеющий DependencyProperty, должен быть получен из класса DependencyObject (класс WPF, который поддерживает коллекцию с именем EffectiveValues ​​). Когда пользователь задает значение DependencyPropertys явно на объекте класса (по коду или по анимации или по стилю), значение сохраняется в коллекции EffectiveValues, которая находится в классе DependencyObject и резервная память.