第十三章 枚举类型与位标记[《.net框架程序设计》读书笔记]

.net框架|笔记|程序|设计

第十三章 枚举类型与位标记

一、 枚举类型

1、 使用枚举类型的理由:

l 枚举类型是得程序更容易编写、阅读、维护,在代码中使用符号名称代替数字是程序设计的一贯主张。

l 强类型的,便于类型检验

2、 注意事项:

l 枚举类型继承自System.Enum,System.Enum又继承自System.ValurType

l 枚举类型不能定义方法、属性、事件

l 枚举类型为常数而非只读字段,因此可能引入版本问题(见第八章的相关讨论)

l 将枚举类型与引用它的类型定义在同一层次上,可减少代码录入的工作量

3、 System.Enum中方法的应用:

l public static Type GetUnderlyingType(Type enumType);
获取用于保存枚举类型实例值得基础类型。声明某枚举类型使用的基础类型语法如下:
enum Human : byte
{
Male,
Female
}
则调用上述方法Enum.GetUnderlyingType(typeof(Human));将返回System.Byte;
l public override string ToString();
public string ToString(string); //参数为格式字符串
public static string Format(Type enumType,object value,string format);
//Value – 要转换的值,format – 格式字符串(G,g,X,x,D,d,F,f)
l public static Array GetValues(Type enumType);
获取枚举中常数值的数组
l public static string GetName(Type enumType,object value);
在指定枚举中检索具有指定值的常数的名称
l public static string[] GetNames(Type enumType);
检索指定枚举中常数名称的数组。
l public static object Parse(Type, string);
public static object Parse(Type, string, bool);
将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象
l public static bool IsDefined(Type enumType,object value);
返回指定枚举中是否存在具有指定值的常数的指示,value为常数的值或名称
l 系列ToObject方法
返回设置为指定值的、指定枚举类型的实例
二、 位标记

l 使用System.FlagsAttributes定制特性,使得ToString或Format方法可以查找枚举数值中的每个匹配符号,将它们连接为一个字符串,并用逗号分开;Parse方法可用该特性拆分字符串并得到复合的枚举类型

l 使用格式字符串F或f 也有同样的效果

下面的示例说明上述情况

using System;

[Flags] //定制特性

public enum Human : byte //定制基本类型

{

Male = 0x01,

Female = 0x10

}

public class EnumTest

{

public static void Main()

{

Human human = Human.Male | Human.Female; //人妖?

Console.WriteLine(human.ToString()); //使用Flags定制特性的情况

//Console.WriteLine(human.ToString("F")); //没有使用Flags定制特性的情况

Console.WriteLine(Enum.Format(typeof(Human), human, "G"));//使用Flags定制特性的情况

//Console.WriteLine(Enum.Format(typeof(Human), human, "F"));//没有使用Flags定制特性的情况

human = (Human)Enum.Parse(typeof(Human), "17");

Console.WriteLine(human.ToString()); //使用Flags定制特性的情况

//Console.WriteLine(human.ToString("F")); //没有使用Flags定制特性的情况

}

}

/*运行结果

Male, Female

Male, Female

Male, Female

*/

注:上述程序中的注释为不使用Flags特性时的语法

时间: 2024-08-28 12:24:42

第十三章 枚举类型与位标记[《.net框架程序设计》读书笔记]的相关文章

[CLR via C#]15. 枚举类型和位标志

原文:[CLR via C#]15. 枚举类型和位标志 一.枚举类型 枚举类型(enumerated types)定义了一组"符号名称/值"配对. 例如,以下Color类型定义了一组符号,每个符号都标识一种颜色: internal enum Color { While, //赋值0 Red, //赋值1 Green, //赋值2 Blue, //赋值3 Orange //赋值4 } 使用枚举类型的好处: 1)枚举类型使程序更容易编写.阅读和维护.有了枚举类型,符号名称可在代码中随便使用

CLR笔记:12.枚举类型和位标志

12.1 枚举类型 强类型,枚举之间进行不能隐式转换 枚举类型直接派生于System.Enum,后者派生于System.ValueType,值类型,可以使用装箱/拆箱 不能定义方法/属性/事件. 同一个枚举中,多个枚举符号有相同的数值,数值转符号时,会返回其中第一个符号. 枚举类型要与使用它的类在同一级. 默认为int,可以指定枚举成员的类型,只有int,uint,byte,sbyte,long,ulong,short,ushort 这8种基元类型. 可以使用操作符作用于枚举类型,实际上是作用于

将不确定变为确定~整形变量是否可以进行位运算(像枚举类型一样)

如果您看到这个题目,觉得有点怪,那说明你是一个高人,最起码比我高的多,呵呵. 前几天做了一个公用后台管理系统的项目,其中有一个地方涉及到权限管理的,即为每一个按钮赋一个权限,然后它权限汇总到角色表里,即一种角色有一些操作权限 ,表结构如下: 我们看到OperatorAuthority就是操作权限的意思,它是个int类型的,一个role有一个OperatorAuthority,那我们应该怎么把多个权限存储到OperatorAuthority字段里呢? 这时,我想到了枚举类型的位运算,所以我把权限枚

第5章(5) 枚举类型

枚举类型用enum关键字声明,其实质是类,有自己的方法: toString():显示某个enum实例的名字. ordinal():表示某个特定enum常量的声明顺序. values():按照enum常量的声明顺序,产生由这些常量值构成的数组. 如下面的例子所示: public class Test { public static void main(String[] args) { for (MyType myType : MyType.values()) { System.out.printl

《.net编程先锋C#》第四章 C#类型(转)

编程 第四章 C#类型 既然你知道了怎样创建一个简单的C#程序,我将会给你介绍C#的类型系统.在这一章中,你学到如何使用不同的值和引用类型,加框和消框机制能为你作些什么.尽管这一章的不侧重于例子,但你可以学到很多重要的信息,关于如何创建现成类型的程序.4.1 值类型 各种值类型总是含有相应该类型的一个值.C#迫使你初始化变量才能使用它们进行计算-变量没有初始化不会出问题,因为当你企图使用它们时,编译器会告诉你. 每当把一个值赋给一个值类型时,该值实际上被拷贝了.相比,对于引用类型,仅是引用被拷贝

>第四章 C#类型(rainbow 翻译)(来自重粒子空间)

<<展现C#>>第四章 C#类型(rainbow 翻译)   出处:http://www.informit.com\matter\ser0000002\chapter4\ch04_04.shtml 正文: 第四章  C#类型     既然你知道了怎样创建一个简单的C#程序,我将会给你介绍C#的类型系统.在这一章中,你学到如何使用不同的值和引用类型,加框和消框机制能为你作些什么.尽管这一章的不侧重于例子,但你可以学到很多重要的信息,关于如何创建现成类型的程序.4.1 值类型     

【书评:Oracle查询优化改写】第五至十三章

[书评:Oracle查询优化改写]第五至十三章 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 字符串的处理 ② 常用分析函数 ③ 用sql输出九九乘法表     本文如有错误或不完善的地方请大家多多指正,ITPUB留言或QQ皆可,您的批评指正是我写作的最大动力.     一.2.2  实验环境介绍   oracle 11g   一.2.3  相关

c#-C#枚举类型的问题

问题描述 C#枚举类型的问题 刚接触计算机语言 请问 enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };//1 Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow;//2 Colors myColors = Colors.Red & Colors.Blue & Colors.Yellow;//3 第2.3行是什么意思?? 得到什么结果? 解决方案 Colors

《Effective Objective-C 2.0》3、枚举类型表示状态、选项

第五条:使用枚举类型表示状态和选项,可以使代码更加清晰,可读性更好. 枚举类型使用关键字enum定义,通常与typedef相结合,定义一组状态或选项: typedef enum CustomState { CustomStateNone, CustomStateDefault, CustomStateAnother, } CustomState; 此后,就可以像内建类型一样使用CustomState定义变量: CustomState state = CustomStateDefault; 定义枚