浅析Flags

学习过enum的人基本上知道枚举的成员可以显式地赋值给任何成员,若无显式赋值,编译器则会隐式地给它们赋值(隐式赋值默认从0开始依次加一,若其中某个成员有显式赋值,则后面没有显式赋值的成员默认为前一个成员的值加一)。而enum也是根据这些值去需找对应的枚举成员的。如下代码:
  public enum CardDeckSettings:uint
  {
       SingleDeck = 0x01,
       LargePictures = 0x02,
       FancyNumbers = 0x04,
       Animation = 0x08
  }

  static void Main(string[] args)
  {
       CardDeckSettings ops1 = CardDeckSettings.FancyNumbers;
       Console.WriteLine(ops1.ToString());
       ops1 = CardDeckSettings.FancyNumbers|CardDeckSettings.Animation;
       Console.WriteLine(ops1.ToString());
  }

运行结果:


由运行结果可知,以上代码最后的输出结果为12,而不是任何的字符串成员。原因在于,12对应的字符串成员不存在,所以编译器直接输出了12。

加上Flags的代码如下:

    [Flags]
    public enum CardDeckSettings:uint
    {
        SingleDeck = 0x01,
        LargePictures = 0x02,
        FancyNumbers = 0x04,
        Animation = 0x08
    }
而此时的运行结果变为:

若加Flags的代码变成以下代码:

    [Flags]
    public enum CardDeckSettings:uint
    {
        SingleDeck = 0x01,
        LargePictures = 0x04,
        FancyNumbers = 0x02,
        Animation = 0x02
    }
则运行结果为:


由以上结论可知,Flags特性的用途有:

1.通知编译器该枚举成员不仅可以用作单独的值,还可以按位标志进行组合。

2.允许枚举的ToString方法为位标志的值提供更多的格式化信息。即ToString方法以一个枚举值为参数,将其与枚举的常量成员相比较,若是与某个成员相匹配,ToString返回该成员的字符串名称,若不匹配,则返回枚举值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值