这在C#中究竟是什么意思?

时间:2010-12-01 15:59:45

标签: c#

我正在浏览一个开源的.NET twain包装器并看到了这个:

[Flags]
internal enum TwDG : short
{                                   // DG_.....
    Control = 0x0001,
    Image = 0x0002,
    Audio = 0x0004
}

'Flag'装饰器究竟是什么意思? (它被称为'装饰者'吗?)

此外,短语在枚举声明结尾处的含义是什么?

谢谢!

10 个答案:

答案 0 :(得分:8)

Flags Attribute用于允许和修饰对枚举值进行逐位数学运算的枚举。

这样做可以将它们或其他操作项一起添加。

Short部分将其定义为Short而不是整数,详细信息也在链接的URL中

答案 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)

它的flag属性,你可以在这里阅读:

http://msdn.microsoft.com/en-us/library/cc138362.aspx

允许您将一组枚举设置为有点标记。

答案 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

短 - 数据时间,用于存储枚举值。