码迷,mamicode.com
首页 > 编程语言 > 详细

位标记与Flags特性结合枚举在Unity中的使用小记

时间:2014-12-12 23:27:11      阅读:396      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   使用   sp   

位标记与Flags特性结合枚举中的使用小记

      enum在应用中往往用来标记一些我们需要的类似开关功能的效果,enum默认的初始化值是根据以下形式赋值的。如下图:

bubuko.com,布布扣

图-1

而且在是用enum来标记位时往往用十六进制而不是十进制,因为十进制的相关性要比十六进制强很多。早在C#4.0以前,要确定一个特定的位是否被设置,是对标志字与该位标志是用位与运算符,如:

bool useRed = (ops & Colors.Red) == Colors.Red;

C#4.0引入了HasFlag方法用来检测多个标记位,具体的是用方法应查MSDN。

特性:

使用特性有几个便利,例如:

第一,它会通知编译器、对象浏览器和其他观察这段代码的工具该枚举的成员将要被结合为位标记,而不是只作为分开的值使用;

第二,允许一个枚举的ToString方法,以对位标记的值提供更合适的格式化。

下面是例子:

 1 [Flags]
 2    enum CardDeckSettings : uint
 3    {
 4       SingleDeck = 0x01,         // bit 0
 5       LargePictures = 0x02,      // bit 1
 6       FancyNumbers = 0x04,       // bit 2
 7       Animation = 0x08           // bit 3
 8    }
 9 
10    class MyClass
11    {
12       bool UseSingleDeck               = false,
13            UseBigPics                  = false,
14            UseFancyNumbers             = false,
15            UseAnimation                = false,
16            UseAnimationAndFancyNumbers = false;
17 
18       public void SetOptions( CardDeckSettings ops )
19       {
20          UseSingleDeck = ops.HasFlag( CardDeckSettings.SingleDeck );
21          UseBigPics = ops.HasFlag( CardDeckSettings.LargePictures );
22          UseFancyNumbers = ops.HasFlag( CardDeckSettings.FancyNumbers );
23          UseAnimation = ops.HasFlag( CardDeckSettings.Animation );
24 
25          CardDeckSettings testFlags =
26                      CardDeckSettings.Animation | CardDeckSettings.FancyNumbers;
27          UseAnimationAndFancyNumbers = ops.HasFlag( testFlags );
28       }
29 
30       public void PrintOptions()
31       {
32          Console.WriteLine( "Option settings:" );
33          Console.WriteLine( "  Use Single Deck                 - {0}", UseSingleDeck );
34          Console.WriteLine( "  Use Large Pictures              - {0}", UseBigPics );
35          Console.WriteLine( "  Use Fancy Numbers               - {0}", UseFancyNumbers );
36          Console.WriteLine( "  Show Animation                  - {0}", UseAnimation );
37          Console.WriteLine( "  Show Animation and FancyNumbers - {0}",
38                                                            UseAnimationAndFancyNumbers );
39       }
40    }
41 
42    class Program
43    {
44       static void Main( string[] args )
45       {
46          MyClass mc = new MyClass();
47          CardDeckSettings ops = CardDeckSettings.SingleDeck
48                                 | CardDeckSettings.FancyNumbers
49                                 | CardDeckSettings.Animation;
50          mc.SetOptions( ops );
51          mc.PrintOptions();
52       }
53    }

 

 

位标记与Flags特性结合枚举在Unity中的使用小记

标签:style   blog   http   io   ar   color   os   使用   sp   

原文地址:http://www.cnblogs.com/saer/p/4160619.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!