【发布时间】:2013-06-10 20:48:38
【问题描述】:
我在 System.Windows.Forms 命名空间中找到了这个 gem (IMO)。我正在努力弄清楚为什么会这样设置。
[Flags]
public enum MouseButtons
{
None = 0,
Left = 1048576,
Right = 2097152,
Middle = 4194304,
XButton1 = 8388608,
XButton2 = 16777216,
}
有人可以解释为什么它使用这些值(2^20 到2^24 的幂)而不是这个:
public enum MouseButtons
{
None = 0,
Left = 1, // 2^0
Right = 2, // 2^1
Middle = 4, // 2^2
XButton1 = 8, // 2^3
XButton2 = 16, // 2^4
}
第一个值是二进制的100000000000000000000,它为另外20位留出了空间!为什么我们需要这样的空间,为什么要这样保存?
【问题讨论】:
-
可能是Win32的兼容性问题。
-
@newStackExchangeInstance 介意分享一个链接或解释可能导致这样的事情吗?
-
我没有关于这种特殊情况的任何信息,但我知道的是,由于 win32,.NET 中的枚举中有很多奇怪的值。
-
所以枚举值以某种方式直接传入/传出win32而不映射到正常值?这比这更奇怪
-
Afaik 它只是强制转换,因为所有枚举都只是整数类型的类型安全包装器。