Почему обертки свойств .NET игнорируются во время выполнения при установке свойств зависимостей в XAML?

Я читаю книгу Адама Натана "WPF 4 Unleashed", и на странице 82 есть следующее предупреждение:

Оболочки свойств .NET игнорируются во время выполнения при настройке свойств зависимостей в XAML!
Хотя компилятор XAML зависит от оболочки свойств во время компиляции, WPF вызывает базовые методы GetValue и SetValue непосредственно во время выполнения! Поэтому, чтобы поддерживать паритет между установкой свойства в XAML и процедурным кодом, важно, чтобы оболочки свойств не содержали никакой логики в дополнение к вызовам GetValue / SetValue. Если вы хотите добавить пользовательскую логику, для этого нужны зарегистрированные обратные вызовы. Все встроенные оболочки свойств WPF соблюдают это правило, поэтому это предупреждение предназначено для всех, кто пишет собственный класс со своими собственными свойствами зависимостей.

Мой вопрос: почему? По каким причинам WPF вызывает GetValue () / SetValue () вместо чтения / установки оболочки свойств CLR? Если причина в том, что чтение / установка оболочки свойств требует отражения, тогда WPF все равно использует отражение при построении дерева объектов, поэтому стоит ли вообще обходить использование оболочек свойств и напрямую вызывать GetValue () / SetValue ()? Или избегание рефлексии не является основной причиной такого поведения?

UPD. Клеменс быстро дал правильный ответ, но я бы добавил еще одну цитату со страницы MSDN (насколько я понимаю, StackOverflow предпочитает цитаты ссылкам):

Тип просматривается через комбинацию xmlns и атрибутов сборки, но при этом идентифицируются элементы, определяется, какие из них могут поддерживать установку в качестве атрибута, и решается, какие типы поддержки значений свойств в противном случае потребовали бы обширного отражения с помощью PropertyInfo. Поскольку свойства зависимостей для данного типа доступны в виде таблицы хранения через систему свойств, реализация WPF его процессора XAML использует эту таблицу и делает вывод, что любое данное свойство ABC может быть более эффективно установлено путем вызова SetValue для содержащего производного типа DependencyObject, используя идентификатор свойства зависимости ABCProperty.

Ответы на вопрос(1)

Ваш ответ на вопрос