繁体   English   中英

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

[英]What exactly does this mean in C#?

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

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

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

此外,在枚举声明结束时,短片是什么意思?

谢谢!

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

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

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

这是一个属性。 虽然其他人已经说过有必要让你可以用枚举执行位翻转操作,但事实并非如此。 您可以使用没有此属性的枚举执行此操作。

如果你已经应用了这个属性,你会在枚举上得到一个不同的ToString()输出,这将输出枚举值的组合成员,例如“Blue | Red | Orange”,而不是“7”。

“short”关键字表示枚举成员的类型将是16位有符号整数

这意味着你给出一个提示,这个枚举将用于“按位或”操作

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 (在Framework 4.0中添加了Enum.HasFlag

简而言之,这个enum的back-type不是int(这是枚举的默认选项),但是很短。 您还可以指定long,ushort或任何其他整数内置类型。

这使枚举成为一个标志。
这意味着您可以将各个值组合在一起。
喜欢:

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
}

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

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

让您对一组枚举进行处理。

short表示枚举使用short而不是int作为其基类型。 至于标志http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx

short是System.Int16的另一个关键字,一个两字节整数,范围从-32,768到32,767。 默认情况下,枚举的基类型是int; 在这种情况下,他们试图使用较小的数据类型来存储枚举器值。

Flags是一个属性 ; 具体来说, System.FlagsAttribute

这意味着编译器允许您使用TwDG类型的值作为位字段,即在一个值中存储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;

我之前听说他们叫装饰员(并且可以在社区中将它们标记为这样)但是为了论证和严格来说; 这是一个属性。 它用于将枚举“标记”为位标志类型。
这是MSDN参考

至于[Flag] - 你应该看这里的链接文字

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM