标签:style blog http io ar color os 使用 sp
enum在应用中往往用来标记一些我们需要的类似开关功能的效果,enum默认的初始化值是根据以下形式赋值的。如下图:
图-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 }
标签:style blog http io ar color os 使用 sp
原文地址:http://www.cnblogs.com/saer/p/4160619.html