Подтвердить что ты не робот

Необходимо короткое и четкое определение для "Свойства зависимостей"

Я пытаюсь выяснить, какие именно свойства Dependency, но когда я смотрю в любом месте для определения, я только нахожу "как использовать", но не "что это такое". Представьте, что вас попросили на собеседовании - что такое свойство зависимостей. Каким будет ваш ответ?

4b9b3361

Ответ 1

A DependencyProperty - это свойство, значение которого зависит (или может зависеть) от некоторого другого источника (например, анимация, привязка данных, стили или наследование визуального дерева). Регулярное значение свойства хранится в объекте, к которому он принадлежит, в то время как вы можете думать о свойстве зависимости как хранящемся в базе данных где-то. Эта база данных по существу состоит из словаря, который сопоставляет (объект, свойство) пары с их значениями, а также сопоставление свойств которых зависит от других свойств (например, когда вы меняете DataContext панели, он может уведомлять всех детей внутри панель).

Итак, почему они где-то хранят значения свойств в какой-то волшебной базе? Существует несколько причин:

  • Это уменьшает пространство для хранения. Добавляя свойство (даже если его значение равно null), класс добавляет 4 байта (8 для 64-битного процесса) пространства к каждому экземпляру класса. Зависимость DependencyProperty занимает только место, когда экземпляр имеет значение. Например, FrameworkElement имеет множество свойств зависимостей, большинство из которых никогда не присваиваются значениям. Если все эти свойства были сохранены в классе, каждый экземпляр был бы сотнями байтов. Вместо этого каждый экземпляр имеет всего около 40 байт.

  • Он позволяет присоединить свойства. Свойства, такие как Canvas.Left и Grid.Row, должны храниться на объектах, которые никогда не слышали о Canvas или Grid, поэтому, где вы их помещаете? Вы помещаете их в базу данных где-то.

  • Он позволяет автоматически изменять свойства. Представьте себе, как бы вы реализовали нечто вроде стилей или наследования свойств (возможность установить что-то вроде шрифта или контекста данных в родительском элементе и распространить его значение на все дочерние элементы). Если все это хранится в базе данных, это делает так, что код находится в одном месте, а не реализуется отдельно для каждого объекта и требуемого им свойства.

Ответ 2

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

Учебник WPF - Введение в свойства зависимостей

Ответ 3

Свойство зависимостей является свойством, которое поддерживается системой свойств WPF, а не полем в объявляющем классе.

Значение этого состоит в том, что, поскольку WPF владеет свойством, WPF может учитывать различные соображения при вычислении значения свойства - например, анимации, стили и привязки данных. Другим следствием является то, что, поскольку свойства управляются WPF, они не должны быть объявлены на классах, которые концептуально имеют состояние: следовательно, аттентифицированные свойства, которые позволяют, например, Grid для связывания специфичного для Grid состояния с объектами без Grid.

(Кстати, я упомянул WPF выше, потому что это основная структура, использующая DP, но Windows Workflow Foundation также имеет понятие свойств зависимостей. Поэтому, чтобы быть строго правильным, DP является свойством, которое поддерживается внешняя система собственности, в частности та, которая позволяет вводить в действие факторы, отличные от "последнего установленного значения" при получении значения свойства.)

Ответ 4

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

Также свойство depedency имеет встроенную поддержку уведомлений об изменениях, привязки данных и стилизации.

Каковы они?

Множество классов и определенные способы их использования, которые предоставляют вышеупомянутые функции для классов, которые наследуются от DependencyObject.

Они не являются языковой функцией. Они являются признаками .NET Framework.

Ответ 5

MSDN дает хорошее определение, описание и примеры

Для более глубокого понимания проверки DependencyProperty здесь

Ответ 6

Зависимость зависит от нескольких поставщиков для определения его значения в любой момент времени. Этими провайдерами могут быть анимация, непрерывно изменяющая ее значение, родительский элемент, значение свойства которого распространяется до его дочерних элементов и т.д.

Вероятно, самой большой особенностью свойства зависимостей является встроенная способность предоставлять уведомление об изменении.

Всякий раз, когда изменяется значение свойства зависимостей, WPF может автоматически запускать несколько действий в зависимости от метаданных свойств. Эти действия могут быть повторно отображены - использование соответствующих элементов, обновление текущего макета, обновление привязок данных и намного больше. Одна из самых интересных функций, включенных в эту встроенную это триггеры свойств, которые позволяют выполнять ваши собственные действия, когда изменение стоимости свойства, без написания какого-либо процессуального кода