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

Почему свойства зависимостей?

Почему Microsoft отправилась на путь создания свойств зависимостей и объектов зависимостей вместо использования отражений и, возможно, атрибутов?

4b9b3361

Ответ 1

Это помогло мне понять рассуждения:

Основное отличие состоит в том, что значение обычного свойства .NET напрямую читается из частного члена в вашем классе, тогда как значение DependencyProperty разрешено динамически при вызове метода GetValue(), который унаследован от DependencyObject.

Когда вы устанавливаете значение свойства зависимости, оно не сохраняется в поле вашего объекта, а в словаре ключей и значений, предоставляемых базовым классом DependencyObject. Ключ записи - это имя свойства, а значение - это значение, которое вы хотите установить.

Преимущества свойств зависимостей следующие:

Снижение объема памяти

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

Наследование значений

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

Изменить уведомление

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

От: Учебники WPF.

Ответ 2

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

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