我正在浏览一个开源的.NET twain包装器并看到了这个:
[Flags]
internal enum TwDG : short
{ // DG_.....
Control = 0x0001,
Image = 0x0002,
Audio = 0x0004
}
'Flag'装饰器究竟是什么意思? (它被称为'装饰者'吗?)
此外,短语在枚举声明结尾处的含义是什么?
谢谢!
答案 0 :(得分:8)
答案 1 :(得分:3)
这是一个属性。虽然其他人已经说过有必要让你可以用枚举执行位翻转操作,但事实并非如此。您可以使用没有此属性的枚举来执行此操作。
如果你已经应用了这个属性,你会在枚举上得到一个不同的ToString()输出,这将完美地打印枚举值的组合成员,例如: “蓝色|红色|橙色”,而不是“7”。
“短”关键字表示枚举成员的类型为16-bit signed integer。
答案 2 :(得分:2)
这意味着你提示一下,这个枚举将用于“按位或”操作
var flags = TwDG.Control | TwDG. Image;
Console.WriteLine(flags.HasFlag(TwDG.Image)); // true
Console.WriteLine(flags.HasFlag(TwDG.Control)); // true
Console.WriteLine(flags.HasFlag(TwDG.Audio)); // false
更多信息FlagAttribute(在框架4.0中添加了Enum.HasFlag
)
简短地说,这个枚举的back-type不是int(这是枚举的默认选项),但是很短。您还可以指定long,ushort或任何其他整数内置类型。
答案 3 :(得分:1)
这使得枚举成为一个标志 这意味着您可以将各个值组合在一起 像:
TwDG value = TwDG.Control | TwDG.Image | TwDG.Audio;
这将使其值为7.
单个枚举值的值通常为2^n
。但也可以合并如下:
[Flags]
public enum Sides
{
Left = 1,
Right = 2,
Up = 4,
Down = 8,
LeftAndRight = 3,
UpAndDown = 12,
AllSides = 15
}
答案 4 :(得分:1)
答案 5 :(得分:1)
short表示枚举使用short而不是int作为其基类型。 至于旗帜 http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx
答案 6 :(得分:1)
short是System.Int16的另一个关键字,一个两字节整数,范围从-32,768到32,767。默认情况下,枚举的基类型是int;在这种情况下,他们试图使用较小的数据类型来存储枚举器值。
答案 7 :(得分:0)
Flags
是属性;具体而言,System.FlagsAttribute
。
这意味着编译器允许您使用类型TwDG
的值作为位字段,即在一个值中存储任意数量的值,如下所示:
var control = TwDG.Control;
var allTogether = TwDG.Control | TwDG.Image | TwDG.Audio;
通常,当某些代码需要采取不同(或可选)操作时,这取决于是否设置了其中一个标志。例如,假设我们要描述视频文件的内容,该文件可能包含音频和图片。你可以写:
var imageAndAudio = TwDG.Image | TwDG.Audio;
var muteImage = TwDG.Image;
然后,如果您想检查文件是否包含音轨,您可以“选择”Audio
标志,如下所示:
var hasAudio = (myValue & TwDG.Audio) != (TwDG) 0;
答案 8 :(得分:0)
我之前听过他们叫装饰师(并且可以在社区中将它们标记为这样)但是为了论证和严格来说;这是一个属性。它用于将枚举“标记”为位标志类型 这是MSDN Reference。
答案 9 :(得分:0)
至于[Flag] - 你应该看link text
短 - 数据时间,用于存储枚举值。