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
    }
}

所以我只想知道为什么 MS 选择这种方式来存储布尔值而不是bool为每个标志使用一个字段。他们只是想为每个字段节省空间,这仅仅是他们的编码风格吗?

4

1 回答 1

7

有几个原因。一对包括:

  • 这是一个巨大的节省空间。1 个短表示许多(本例中为 9 个)可能性。这是单个 ushort 的大小,而不是许多布尔值
  • 您可以将所有这些值传递给单个参数中的方法,而不是使用许多参数和一堆重载方法。
于 2013-08-08T18:43:46.500 回答