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

本文深入探讨了.NET框架中的枚举类型,强调了枚举类型在编程中的重要性和注意事项,如继承自System.Enum,以及与类型检验的关系。同时,文章详细介绍了位标记的概念,包括如何使用System.FlagsAttributes特性以及相关方法如ToString和Parse。通过示例代码展示了枚举类型的复合操作及其在输出和解析中的应用。
摘要由CSDN通过智能技术生成

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

一、             枚举类型

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

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

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

2、  注意事项:

l         枚举类型继承自System.EnumSystem.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定制特性,使得ToStringFormat方法可以查找枚举数值中的每个匹配符号,将它们连接为一个字符串,并用逗号分开;Parse方法可用该特性拆分字符串并得到复合的枚举类型

l         使用格式字符串Ff 也有同样的效果

下面的示例说明上述情况

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特性时的语法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值