System.Drawing.ContentAlignment枚举如下所示:
namespace System.Drawing
{
// Summary:
// Specifies alignment of content on the drawing surface.
[Editor("System.Drawing.Design.ContentAlignmentEditor, System.Drawing.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
public enum ContentAlignment
{
TopLeft = 1,
TopCenter = 2,
TopRight = 4,
MiddleLeft = 16,
MiddleCenter = 32,
MiddleRight = 64,
BottomLeft = 256,
BottomCenter = 512,
BottomRight = 1024,
}
}
为什么值以旗帜式定义?为什么8和128缺少?
答案 0 :(得分:4)
也许让ContentAlignment
枚举参与按位操作。
但为什么它没有用
FlagsAttribute
装饰?
因为它不打算被客户端用作按位标志,所以它们没有用FlagsAttribute修饰枚举。
您可以参考.net框架源,了解它们如何通过按位操作很好地使用ContentAlignment
。
ControlPaint.TranslateAlignment使用它,您可以在top of the class
中看到使用按位OR的声明private static readonly ContentAlignment anyRight = ContentAlignment.TopRight | ContentAlignment.MiddleRight | ContentAlignment.BottomRight;
private static readonly ContentAlignment anyBottom = ContentAlignment.BottomLeft | ContentAlignment.BottomCenter | ContentAlignment.BottomRight;
private static readonly ContentAlignment anyCenter = ContentAlignment.TopCenter | ContentAlignment.MiddleCenter | ContentAlignment.BottomCenter;
private static readonly ContentAlignment anyMiddle = ContentAlignment.MiddleLeft | ContentAlignment.MiddleCenter | ContentAlignment.MiddleRight;
这应该回答“为什么以旗帜式的方式定义的价值”。
为什么8和128缺少?
我不知道。如果有人有,评论将不胜感激。
答案 1 :(得分:2)
昨天我看到一位来自匿名用户的建议编辑试图解释为什么缺少8和128。它被拒绝了,因为它被编辑成现有答案。
我认为这只是猜测,而不是一个明确的答案,但听起来似乎有道理,所以这里(引自Sriram Sakthivel的回答):
为什么8和128缺少?
我不知道。如果有人有,评论将不胜感激。
让我们拿一下:
<00> 0000 0000 0000 0000没有8,128或1024以上的原因如下: 对于前3个(TopLeft,TopCenter和TopRight),取前4位:
TopLeft = 1 (0001)
TopCenter = 2 (0010)
TopRight = 4 (0100)
然后是第二个3(MiddleLeft,MiddleCenter和MiddleRight)
MiddleLeft = 16 (0001[0000])
MiddleCenter = 32 (0010[0000])
MiddleRight = 64 (0100[0000])
然后是最后3(BottomLeft,BottomCenter和BottomRight)
BottomLeft = 256 (0001[00000000])
BottomCenter = 512 (0010[00000000])
BottomRight = 1024 (0100[00000000])
这使得按位操作变得容易,不仅是垂直操作,也是水平操作。