なぜマイクロソフトは、リフレクションやおそらく属性を使用する代わりに、依存関係プロパティと依存関係オブジェクトを作成するルートをとったのですか?
これは私が理由を理解するのに役立ちました:
主な違いは、通常の.NETプロパティの値がクラスのプライベートメンバーから直接読み取られることです、一方、DependencyPropertyの値は、から継承されたGetValue()メソッドを呼び出すと、動的に解決されます DependencyObject。
依存関係プロパティの値を設定すると、オブジェクトのフィールドではなく、基本クラスDependencyObjectによって提供されるキーと値のディクショナリに格納されます。エントリのキーはプロパティの名前であり、値は設定する値です。
依存関係プロパティの利点は次のとおりです。
メモリフットプリントの削減
UIコントロールのプロパティの90%以上が通常は初期値のままであると考える場合、各プロパティのフィールドを格納することは大きな散逸です。依存関係プロパティは、変更されたプロパティのみをインスタンスに格納することで、これらの問題を解決します。デフォルト値は、依存関係プロパティ内に1回保存されます。
値の継承
依存関係プロパティにアクセスすると、値解決戦略を使用して値が解決されます。ローカル値が設定されていない場合、依存関係プロパティは、値が見つかるまで論理ツリーを上に移動します。ルート要素にFontSizeを設定すると、値をオーバーライドすることを除いて、以下のすべてのテキストブロックに適用されます。
変更通知
依存関係プロパティには、変更通知メカニズムが組み込まれています。プロパティメタデータにコールバックを登録すると、プロパティの値が変更されたときに通知が届きます。これは、データバインディングでも使用されます。
差出人: WPFチュートリアル 。
依存関係プロパティ リフレクションおよび属性が解決するのとは異なる使用シナリオを解決します。
依存関係プロパティは、標準プロパティでは処理できないことを実行するための単一の一貫したAPIを提供します。