Warum werden .NET-Eigenschaftenwrapper zur Laufzeit umgangen, wenn Abhängigkeitseigenschaften in XAML festgelegt werden?

Ich lese Adam Nathans Buch "WPF 4 Unleashed" und es gibt folgende Warnung auf Seite 82:

.NET-Eigenschaftenwrapper werden zur Laufzeit umgangen, wenn Abhängigkeitseigenschaften in XAML festgelegt werden!
Obwohl der XAML-Compiler zur Kompilierungszeit vom Property Wrapper abhängig ist, ruft WPF die zugrunde liegenden Methoden GetValue und SetValue direkt zur Laufzeit auf! Um die Parität zwischen dem Festlegen einer Eigenschaft in XAML und dem prozeduralen Code aufrechtzuerhalten, ist es daher wichtig, dass Eigenschafts-Wrapper zusätzlich zu den GetValue / SetValue-Aufrufen keine Logik enthalten. Wenn Sie eine benutzerdefinierte Logik hinzufügen möchten, sind dies die registrierten Rückrufe. Alle in WPF integrierten Eigenschaftenwrapper halten sich an diese Regel. Diese Warnung gilt daher für alle, die eine benutzerdefinierte Klasse mit eigenen Abhängigkeitseigenschaften schreiben.

Meine Frage lautet: Warum? Aus welchen Gründen ruft WPF GetValue () / SetValue () auf, anstatt einen CLR-Eigenschaftenwrapper zu lesen / festzulegen? Wenn der Grund dafür ist, dass das Lesen / Festlegen eines Eigenschaftenwrappers eine Reflektion erfordert, verwendet WPF die Reflektion häufig, wenn ein Objektbaum erstellt wird. Lohnt es sich also wirklich, die Verwendung von Eigenschaftenwrappern zu umgehen und GetValue () / SetValue () direkt aufzurufen? Oder ist das Vermeiden von Reflexionen nicht der Hauptgrund für ein solches Verhalten?

UPD. Clemens gab schnell eine richtige Antwort, aber ich würde nur ein weiteres Zitat von dieser MSDN-Seite hinzufügen (da ich verstehe, dass StackOverflow Anführungszeichen Links vorzieht):

Der Typ wird durch eine Kombination von XMLNs und Assembly-Attributen gesucht, wobei jedoch die Mitglieder identifiziert werden müssen, um zu bestimmen, welche Unterstützung als Attribut festgelegt werden kann, und um zu ermitteln, welche Typen die Eigenschaftswerte unterstützen, andernfalls eine umfassende Reflektion mit PropertyInfo erforderlich wäre. Da Abhängigkeitseigenschaften für einen bestimmten Typ über das Eigenschaftensystem als Speichertabelle zugänglich sind, verwendet die WPF-Implementierung des XAML-Prozessors diese Tabelle und schließt daraus, dass jedes ABC-Merkmal effizienter festgelegt werden kann, indem SetValue für den enthaltenen, von DependencyObject abgeleiteten Typ aufgerufen wird. Verwenden der Abhängigkeitseigenschafts-ID ABCProperty.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage