4

WPFSystem.Windows.Controls.Controlクラスを振り返ると、次のことがわかります。

public class Control : FrameworkElement
{ 
    internal ControlBoolFlags _controlBoolField;
    // [...]
    internal bool ReadControlFlag(ControlBoolFlags reqFlag);
    internal void WriteControlFlag(ControlBoolFlags reqFlag, bool set); 
    // I think it's clear what they do
    // [...]
    internal enum ControlBoolFlags : ushort
    {
        CommandDisabled = 8,
        ContainsSelection = 128,
        ContentIsItem = 16,
        ContentIsNotLogical = 1,
        HeaderIsItem = 32,
        HeaderIsNotLogical = 4,
        IsSpaceKeyDown = 2,
        ScrollHostValid = 64,
        VisualStateChangeSuspended = 256
    }
}

boolしたがって、MSがすべてのフラグにフィールドを使用するのではなく、ブール値を格納するためにこの方法を選択した理由を知りたいだけです。それは彼らのコーディングスタイルだけでしょうか、それともフィールドごとにスペースを節約したかっただけなのでしょうか?

4

1 に答える 1

7

理由はいくつかあります。カップルは次のとおりです。

  • それは巨大な省スペースです。1 つのショートは、多くの (この例では 9 つ) の可能性を表します。これは、多くのブールではなく、単一の ushort のサイズです
  • 多くのパラメーターとオーバーロードされたメソッドの束を持つのではなく、単一のパラメーターでこれらすべての値をメソッドに渡すことができます。
于 2013-08-08T18:43:46.500 に答える