CLR Via C# 3rd 阅读摘要 -- Chapter 15 - Enumerated Types and Bit Flags

Enumerated Types

1. 枚举类型定义了名称对应值的集合;

2. 使用枚举类型的两个原因:a.编程更容易读写和维护 b.强类型,安全;

3. 枚举类型使用关键字enum,实际上从System.Enum -> System.ValueType继承;

4. 枚举类型不能像值类型那样定义methods,properties,events。但是现在可以通过“扩展方法”给枚举类型添加方法;

5. 枚举类型中使用的象征名称必须是常量,要注意可能会招致版本问题需要重新编译; 

6. static System.Enum.GetUnderlyingType(Type enumType)和instance System.Type.GetEnumUnderlyingType()可以获得枚举类型中的值的类型;

7. 枚举类型的ToString返回枚举象征名称,如果使用X返回十六进制值,总是大写。长度:byte/sbyte=2位,short/ushort=4位,int/uint=8位,long/ulong=16位,前导0补齐;

8. 可以在枚举类型中定义多个不同的象征名称对应同一个值;

9. static System.Enum.GetValues和instance System.Type.GetEnumValues可以获得枚举类型的所有值;

10. static System.Enum.GetNames和instance System.Type.GetEnumNames可以获得枚举类型的所有象征名称;

11. System.Enum.Parse和TryParse可以翻译一个名称或值字符串到对应的枚举值;

12. static System.Enum.IsDefined和instance System.Type.IsEnumDefined可以用来检验枚举参数;

13. System.Enum.IsDefined虽然用起来方便,但要注意:a. 大小写敏感的 b.使用了反射所以比较慢;

14. 枚举类型尽量定义在使用它的类的同一级。

Bit Flags

1. 枚举类型使用FlagsAttribute,表示枚举的值是按位表示的,需要显示的给每个枚举象征名称设置一个值;

2. 枚举类型如果使用了Flag,枚举变量的ToString是这样工作的

  • 获得枚举类型的所有定义的枚举值(集合),以逆序排放;
  • 枚举变量与每个枚举值做AND位操作,如果等于枚举值,在输出字符串后添加对应的象征名称。重复这一步骤;
  • 如果所有的枚举值处理完了,枚举变量还不是0,那么ToString返回枚举变量的原始数字;
  • 如果枚举变量的原始数字不是0,那么返回逗号分隔的象征名称字符串;
  • 如果枚举变量的原始数字是0,而且枚举类型中有定义值为0的项,那么返回该项的名称;
  • 最后,如果到这一步,那么返回“0”。

3. 不要在使用Flag的枚举类型实例上使用IsDefined方法:

  • 如果你传入字符串,它不会分隔字符串之后再查找;
  • 如果你传入数字,它也不会按位来进行处理。

Adding Methods to Enumerated Types

1. 就是使用扩展方法。

本章小结

   本章讲了枚举类型已经按位表示(Flags)的枚举类型。解释了枚举类型的工作原理,着重讲了枚举类型的几个方法以及给枚举类型使用Flags时需要注意的事项,最后讲了如果通过使用扩展方法来给枚举类型增加方法。 

posted @ 2010-04-19 15:41  bengxia  阅读(275)  评论(0编辑  收藏  举报
无觅相关文章插件,快速提升流量