如果您反射(reflection) WPF System.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 选择这种方式来存储 boolean 值,而不是为每个标志使用 bool 字段。
他们只是想为每个领域节省空间,这只是他们的编码风格吗?

最佳答案

有几个原因。一对包括:

  • 这是一个巨大的节省空间。 1 短表示许多(在本例中为 9)可能性。这是单个 ushort 的大小而不是许多 bool
  • 您可以将所有这些值传递给单个参数中的方法,而不是具有许多参数和一堆重载方法。
  • 关于c# - 为什么许多 WPF 类将 boolean 值存储为枚举标志?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18133604/

    10-13 02:26