Почему Microsoft отправилась на путь создания свойств зависимостей и объектов зависимостей вместо использования отражений и, возможно, атрибутов?
Почему свойства зависимостей?
Ответ 1
Это помогло мне понять рассуждения:
Основное отличие состоит в том, что значение обычного свойства .NET напрямую читается из частного члена в вашем классе, тогда как значение DependencyProperty разрешено динамически при вызове метода GetValue(), который унаследован от DependencyObject.
Когда вы устанавливаете значение свойства зависимости, оно не сохраняется в поле вашего объекта, а в словаре ключей и значений, предоставляемых базовым классом DependencyObject. Ключ записи - это имя свойства, а значение - это значение, которое вы хотите установить.
Преимущества свойств зависимостей следующие:
Снижение объема памяти
Это огромная диссипация для хранения поля для каждого свойства, если вы считаете, что более 90% свойств элемента управления пользовательского интерфейса обычно остаются в исходных значениях. Свойства зависимостей решают эти проблемы только путем сохранения модифицированных свойств в экземпляре. Значения по умолчанию сохраняются один раз в пределах свойства зависимостей.
Наследование значений
При доступе к свойству зависимостей значение разрешается с использованием стратегии с разрешающей способностью. Если локальное значение не задано, свойство зависимостей перемещается по логическому дереву до тех пор, пока не найдет значение. Когда вы устанавливаете FontSize в корневом элементе, он применяется ко всем текстовым блокам ниже, за исключением того, что вы переопределяете значение.
Изменить уведомление
Свойства зависимостей имеют встроенный механизм уведомления об изменениях. Зарегистрировав обратный вызов в метаданных свойств, вы получите уведомление, когда значение свойства было изменено. Это также используется привязкой данных.
От: Учебники WPF.
Ответ 2
Свойства зависимостей разрешают другой сценарий использования, чем отражение и атрибуты будут решать.
Свойства зависимостей предоставляют единый, согласованный API для выполнения действий, которые стандартные свойства не могут обрабатывать.
- Разрешить классы предоставлять большое количество свойств без накладных расходов (поскольку они создаются, статически, когда используются, а не один раз в классе). Для
- Система свойств зависимостей обрабатывает такие вещи, как Attached Properties в соответствии с стандартными свойствами зависимостей.
- Свойства зависимостей предоставляют чистый API для отслеживания изменений, а также проверки.
- Свойства зависимостей предоставляют свойство наследования свойств.
- Свойства зависимостей обеспечивают отличную производительность при привязке данных.