惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Martin Fowler
Martin Fowler
云风的 BLOG
云风的 BLOG
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
The Blog of Author Tim Ferriss
大猫的无限游戏
大猫的无限游戏
A
About on SuperTechFans
小众软件
小众软件
博客园_首页
博客园 - 聂微东
罗磊的独立博客
Recent Announcements
Recent Announcements
U
Unit 42
N
Netflix TechBlog - Medium
Blog — PlanetScale
Blog — PlanetScale
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
V
V2EX
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
Stack Overflow Blog
Stack Overflow Blog
博客园 - Franky
D
DataBreaches.Net
Last Week in AI
Last Week in AI

博客园 - bengxia

DataGridView中的{索引-1沒有值}异常 Silverlight + WCF + Sharepoint(Silverlight Web Part) 问题集合 CLR Via C# 3rd 阅读摘要 -- Chapter 29 – Hybrid Thread Synchronization Constructs CLR Via C# 3rd 阅读摘要 -- Chapter 28 – Primitive Thread Synchronization Constructs FIX: Unable to find a version of the runtime to run this application. CLR Via C# 3rd 阅读摘要 -- Chapter 27 – I/O-Bound Asynchronous Operations CLR Via C# 3rd 阅读摘要 -- Chapter 26 – Compute-Bound Asynchronous Operations CLR Via C# 3rd 阅读摘要 -- Chapter 25 – Thread Basics CLR Via C# 3rd 阅读摘要 -- Chapter 24 – Runtime Serialization CLR Via C# 3rd 阅读摘要 -- Chapter 23 – Assembly Loading and Reflection CLR Via C# 3rd 阅读摘要 -- Chapter 22 – CLR Hosting and AppDomains CLR Via C# 3rd 阅读摘要 -- Chapter 21 – Automatic Memory Management (Garbage Collection) CLR Via C# 3rd 阅读摘要 -- Chapter 20 – Exceptions and State Management - bengxia CLR Via C# 3rd 阅读摘要 -- Chapter 19 – Nullable Value Types CLR Via C# 3rd 阅读摘要 -- Chapter 18 - Custom Attributes CLR Via C# 3rd 阅读摘要 -- Chapter 17 - Delegates CLR Via C# 3rd 阅读摘要 -- Chapter 16 - Arrays - bengxia CLR Via C# 3rd 阅读摘要 -- Chapter 14 - Chars, Strings, and Working with Text CLR Via C# 3rd 阅读摘要 -- Chapter 13 - Interfaces
CLR Via C# 3rd 阅读摘要 -- Chapter 15 - Enumerated Types ...
bengxia · 2010-04-19 · via 博客园 - bengxia

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时需要注意的事项,最后讲了如果通过使用扩展方法来给枚举类型增加方法。