4

最近WPFを勉強中。今日、.Net 依存関係プロパティで何か新しいものを見つけました。彼らがテーブルにもたらすものは

  • コールバックのサポート (検証、変更など)
  • プロパティの継承
  • 添付プロパティ

とりわけ。

しかし、ここで私の質問は、なぜそれらを含むクラスで static として宣言する必要があるのですか? 推奨される方法は、インスタンスの「ラッパー」プロパティを追加することです。なんで ?

編集: @Matt、しかし、それはまた、プロパティ値がインスタンス間で共有されることも義務付けていません - もちろんそれが派生値でない限り?

4

3 に答える 3

7

WPFの主要な最適化により、依存関係のプロパティは静的です。WPFのコントロールの多くには、数百とは言わないまでも数十のプロパティがあります。これらのクラスのほとんどのプロパティは、デフォルト値に設定されています。DPがインスタンスプロパティである場合、作成するすべてのオブジェクトのすべてのプロパティにメモリを割り当てる必要があります。DPは静的であるため、WPFは各プロパティのメモリ使用量をより効果的に自由に管理できます。

登録するDPにデフォルト値を指定する必要がある理由は、WPFがデフォルト値に設定されている場合、そのプロパティを含むオブジェクトをいくつ作成しても、プロパティに余分なメモリを割り当てないように注意するためです。

于 2008-08-31T14:19:03.697 に答える
5

依存関係プロパティの静的インスタンスが必要な理由は、まさにそのように設計されているからだと思います。静的ビットは、すべてのプロパティ メタデータ (既定値、所有者の型 (添付プロパティの場合に便利) など)、変更時のコールバック メソッドなどを保持します。インスタンスごとではなく、クラスのすべてのインスタンスにわたってこれらのものを静的に格納することは理にかなっています。

于 2008-08-31T08:44:35.763 に答える
2

その要件の背後には 2 つの理由があります。

  1. 同じ DP を 2 回登録することはできません。この制約に準拠するには、静的変数を使用する必要があります。初期化は 1 回だけなので、DP を登録するのは 1 回だけです。
  2. DPは、クラス(そのDBを使用する)インスタンスが作成される前に登録する必要があります
于 2008-08-31T08:26:55.913 に答える