Почему свойство зависимостей должно быть Static?
Я видел, что его уже спрашивали в каком-то посте здесь, но я не могу его правильно понять.
Будет здорово, если кто-то может помочь мне понять и небольшим фрагментом.
Почему свойство зависимостей должно быть Static?
Я видел, что его уже спрашивали в каком-то посте здесь, но я не могу его правильно понять.
Будет здорово, если кто-то может помочь мне понять и небольшим фрагментом.
Магия здесь, объявление DependencyProperty
есть static
не его value
(то есть память). Объявление, которое вы добавляете с ключевым словом static
, является только идентификатором DependencyProperty
для DependencyObject
, потому что тот же идентификатор будет использоваться всеми экземплярами этого DependencyObject для идентификации свойства, поэтому имеет смысл сделать его static
.
С другой стороны, когда вы устанавливаете значение DependancyProperty
, вызывая экземпляр SetValue
on DependancyObject
, тогда каждый экземпляр DependancyObject
, на который вызывается setvalue, сохранит свое локальное значение свойства, Это обрабатывается внутри класса DependancyObject
, который поддерживает вид Dictionary
, который имеет сопоставление между идентификатором DependancyProperty
и локальным значением.
DependencyProperty должен быть статическим (уровень класса), потому что, когда мы создаем несколько объектов класса, у которого есть это свойство, и хотим передать значение по умолчанию для этого свойства, значение должно исходить от этого статического экземпляр DependencyProperty. Таким образом, значение по умолчанию для всех экземпляров нашего класса одинаково, и система не резервирует память для DependencyProperty для каждого экземпляра этого класса. Таким образом, это уменьшает площадь памяти.
Теперь возникает следующий вопрос: если мы явно задаем значение DependencyPropertys для объектов класса (по коду или по анимации или по стилю)
В этом случае на изображение появляется DependencyObject. Любой класс, имеющий DependencyProperty, должен быть получен из класса DependencyObject (класс WPF, который поддерживает коллекцию с именем EffectiveValues ). Когда пользователь задает значение DependencyPropertys явно на объекте класса (по коду или по анимации или по стилю), значение сохраняется в коллекции EffectiveValues, которая находится в классе DependencyObject и резервная память.