web-dev-qa-db-ja.com

なぜ依存関係プロパティ?

なぜマイクロソフトは、リフレクションやおそらく属性を使用する代わりに、依存関係プロパティと依存関係オブジェクトを作成するルートをとったのですか?

41
Mr Bell

これは私が理由を理解するのに役立ちました:

主な違いは、通常の.NETプロパティの値がクラスのプライベートメンバーから直接読み取られることです、一方、DependencyPropertyの値は、から継承されたGetValue()メソッドを呼び出すと、動的に解決されます DependencyObject

依存関係プロパティの値を設定すると、オブジェクトのフィールドではなく、基本クラスDependencyObjectによって提供されるキーと値のディクショナリに格納されます。エントリのキーはプロパティの名前であり、値は設定する値です。

依存関係プロパティの利点は次のとおりです。

メモリフットプリントの削減

UIコントロールのプロパティの90%以上が通常は初期値のままであると考える場合、各プロパティのフィールドを格納することは大きな散逸です。依存関係プロパティは、変更されたプロパティのみをインスタンスに格納することで、これらの問題を解決します。デフォルト値は、依存関係プロパティ内に1回保存されます。

値の継承

依存関係プロパティにアクセスすると、値解決戦略を使用して値が解決されます。ローカル値が設定されていない場合、依存関係プロパティは、値が見つかるまで論理ツリーを上に移動します。ルート要素にFontSizeを設定すると、値をオーバーライドすることを除いて、以下のすべてのテキストブロックに適用されます。

変更通知

依存関係プロパティには、変更通知メカニズムが組み込まれています。プロパティメタデータにコールバックを登録すると、プロパティの値が変更されたときに通知が届きます。これは、データバインディングでも使用されます。

差出人: WPFチュートリアル

65
Kyle Rozendo

依存関係プロパティ リフレクションおよび属性が解決するのとは異なる使用シナリオを解決します。

依存関係プロパティは、標準プロパティでは処理できないことを実行するための単一の一貫したAPIを提供します。

  • 許可クラスは、オーバーヘッドなしで多数のプロパティを提供できます(これらは、クラスごとに1回ではなく、使用時に静的にのみ作成されるため)。にとって
  • 依存関係プロパティシステムは、 添付プロパティ のようなものを標準の依存関係プロパティとして一貫した方法で処理します。
  • 依存関係プロパティは、 変更の追跡と検証 のクリーンなAPIを提供します。
  • 依存関係プロパティは プロパティ値の継承 を提供します。
  • 依存関係プロパティは、データがバインドされたときに パフォーマンス上の大きな利点 を提供します。
8
Reed Copsey