你所不知道的枚举(flag)?
2015-09-16 22:13
309 查看
一直以为自己很了解枚举,用起来很顺手,但发现自己知道的只是一部分,枚举原来还可以这么玩,与flag关联做逻辑操作。
这里主要说的是C#中的内容。
区别于java(JON SKEET SAY):
C#: 命名常量只能是有效的数字,它们不能表达行为,这一点几乎与C#中的其它内容相反。
java: 表达能力更强,可以声明方法,然后对特殊值重写这些方法。
枚举声明: 枚举类型可以显示的声明基础类型byte,sbyte,short,ushort,int,uint,long,ulong。注意:char不能用作基础类型,没有显示声明基础类型的枚举声明,默认为int。
不能使用完全等效的类型替代“简写版本”:eg: 可以写成 enum Type:Int64 但不能写成 enum Type:System.Int64
枚举修饰符:new,public,protected,internal,private,不可以是abstract,sealed。枚举既不可以抽象,也不允许继承。
枚举成员:可定义零或多个枚举成员,不可以重名;不可以命名为value__,这个名字呗枚举内部保留(VLADIMIR RESHETNIKAO SAY)。
枚举成员可以关联常量值,但必须落在枚举基础类型范围里。
如果枚举成员是枚举类型的第一个枚举成员,那么它的关联值为零。否则,是前一个关联值加一,增加后的值必须落在基础类型的表示范围内。
这样就说明了,枚举值可以同时表示两个值。
这里主要说的是C#中的内容。
简单回顾下枚举:
定义:枚举是一种特殊的值类型,他可以声明一组命名常量区别于java(JON SKEET SAY):
C#: 命名常量只能是有效的数字,它们不能表达行为,这一点几乎与C#中的其它内容相反。
java: 表达能力更强,可以声明方法,然后对特殊值重写这些方法。
枚举声明: 枚举类型可以显示的声明基础类型byte,sbyte,short,ushort,int,uint,long,ulong。注意:char不能用作基础类型,没有显示声明基础类型的枚举声明,默认为int。
不能使用完全等效的类型替代“简写版本”:eg: 可以写成 enum Type:Int64 但不能写成 enum Type:System.Int64
枚举修饰符:new,public,protected,internal,private,不可以是abstract,sealed。枚举既不可以抽象,也不允许继承。
枚举成员:可定义零或多个枚举成员,不可以重名;不可以命名为value__,这个名字呗枚举内部保留(VLADIMIR RESHETNIKAO SAY)。
枚举成员可以关联常量值,但必须落在枚举基础类型范围里。
如果枚举成员是枚举类型的第一个枚举成员,那么它的关联值为零。否则,是前一个关联值加一,增加后的值必须落在基础类型的表示范围内。
枚举逻辑运算符关联Flags:
举例说明:using UnityEngine; using System.Collections; /// <summary> /// 对于一个flag枚举类型,典型值应该为2的n次方,通常用“None”值表示0 /// 使用2的n次方是为了避开Map|Shoes的值为3的类似情况 /// </summary> [System.Flags] public enum Type { Map = 1, //帽子 Shoes = 2, //鞋子 Scarf = 4 //围巾 } public class Test : MonoBehaviour { public Type type; void Start() { //这里只聚了或的例子,还可以尝试&和^ type = Type.Map | Type.Scarf; Wear (type); } void Wear(Type t) { if((t&Type.Map)!=0) Debug.Log("Wear Map"); if((t&Type.Scarf)!=0) Debug.Log("Wear Scarf"); if((t&Type.Shoes)!=0) Debug.Log("Wear Shoes"); } }结果如图:
这样就说明了,枚举值可以同时表示两个值。
相关文章推荐
- HDU 1335 Basically Speaking
- 对实体—联系模型的基本概念的认识
- JLabel类的使用
- LeetCode 10 正则表达式匹配
- 哈夫曼编/译码器
- iOS开发中懒加载的使用和限制
- 从现在开始
- 学习笔记-android开发快速捷径工具之路
- fedora双系统问题
- ZOJ.2060 Fibonacci Again【数论-斐波那契】 2015/09/16
- Linux kernel (without create_proc_entry func) Proc文件系统的实例
- 程序算法艺术与实践:递归策略之矩阵乘法问题
- hdu 5025 Saving Tang Monk(BFS+状态压缩)
- 设计模式_门面模式
- Majority Element
- Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(二)
- cocos基础教程(8)粒子效果
- Zabbix 安装及微信短信提醒
- 简单验证码代码
- 车厢调度