9

私はちょうど振り返りWindowsBase.dll >> System.Windows.UncommonField<T>、このクラスの使用法について疑問に思いました...たとえば、-classで使用されていButtonます:

public class Button : ButtonBase
{    
    private static readonly UncommonField<KeyboardFocusChangedEventHandler> FocusChangedEventHandlerField = new UncommonField<KeyboardFocusChangedEventHandler>();
}

では、この「ラッパー」の用途は何ですか?

4

1 に答える 1

11

簡潔な答え

メモリ使用量を下げるために使用されます。

より長い答え

依存関係プロパティから始めましょう。各DependencyObjectで、多数の依存関係プロパティを定義できます。DependencyPropertyのような「ローカル」であろうと、 のTextBox.TextようなアタッチされたものであろうとGrid.Row、それらのほとんどは設定されず、デフォルト値のみを保持します。定義された依存関係プロパティごとに値を格納することで、各インスタンスがキロバイトのメモリを消費することを避けるためにDependencyObject、既定値とは異なる値のみがインスタンス内に保持されます。

UncommonField<T>ここで、内部クラスに会いましょう。DependencyPropertyメタデータ、強制、またはプロパティ変更通知なしで軽量として表示できます。DependencyPropertyただし、値に関しては実数と同じメカニズムを使用しますDependencyObjectKeyboardFocusChangedイベントはめったに使用されないため (珍しい形容詞の説明) ここで少しメモリを節約することは理にかなっています。

DependencyObjectしかし、何千ものインスタンスを考慮し、数バイトを最適化する必要があるフレームワークを Microsoft が作成しているわけではないでしょう。static UncommonField<T> someFieldaを instanceに置き換えるだけT someFieldです。

于 2013-08-16T18:46:15.343 に答える