枚举

枚举类型是一种值类型,他用来声明一组命名的常数。

(1)枚举的声明

枚举声明用于声明新的枚举类型。

访问修饰符  enum 枚举名:基础类型

{

  枚举成员

}

说明:

  基础类型必须能够表示该枚举中定义的所有枚举数值。枚举声明可显示的声明byte,sbyte,short,ushort,int,uint,long或ulong类型作为对应的基础类型。没有显示声明基础类型的枚举声明意味着所对应的基础类型是int。

(2)枚举成员

枚举成员是该枚举类型的命名常数。

任意两个枚举成员不能具有相同的枚举名称。每个枚举成员具有相关联的常数值,数值类型是对应的基础类型。

示例:

public enum TimeofDay:uint

{

  Morning=-3,

  Afternoon=-2,

  Evenning=-1

}

产生编译错误,原因是常数值-3,-2,-1不在uint范围内。

(3)枚举成员默认值

在枚举成员中声明的第一个成员的默认值是0。以后枚举成员的默认值将是前一个枚举成员(文本顺序)的值加一得到的。

这样得到的枚举成员的值必须在基础类型表示的范围内,否则,回出现编译错误。

示例:

public enum TimeofDay:uint

{

  Morning,

  Afternoon,

  Evening

}

Morning的值是0,Afternoon的值是1,Evening的值是2。

 (4)为枚举成员显示赋值

允许多个枚举成员具有相同值。没有显示赋值的枚举成员的值总是前一个成员的值+1。

示例:

public enum Number

{

  a=1,

  b,

  c=1,

  d

}

b的值为2,d的值为2。

注意:以上枚举值都不能超过它的基础类型范围,否则回报错。

(5)枚举类型与基础类型的转换

枚举类型不能隐式的转换成基础类型。

基础类型不能隐式转换成枚举类型。

示例:

public enum Number

{

  a,

  b,

  c,

  d

}

class Test

{

  public static void Main()

  {

    int i=Number.a;//错误,要强制类型转换(int)Number.a

    

  }

}

(6)System.Enum类型

System.Enum是任何枚举类型的抽象基类,并且从System.Enum继承的成员在任何枚举类型中都可用。

System.Enum本身不是枚举类型。它是一个类类型,所有的枚举类型都从它派生。

System.Enum从类型System.ValueType派生。

(7)使用枚举类型

 示例一:

using System;

 

namespace ConsoleApplicationEnum
{
    public enum TimeofDay
    {
        Morning,
        Afternoon,
        Evening
    }

 

示例二:

    class Program
    {
        static void Main(string[] args)
        {
            Greeting(TimeofDay.Morning);
            Greeting(TimeofDay.Afternoon);
            Greeting(TimeofDay.Evening);
            Console.Read();
        }

 

        static void Greeting(TimeofDay time)
        {
            switch (time)
            {
                case TimeofDay.Morning:
                    Console.WriteLine("Good morning!");
                    break;
                case TimeofDay.Afternoon:
                    Console.WriteLine("Good afternoon!");
                    break;
                case TimeofDay.Evening:
                    Console.WriteLine("Good evening!");
                    break;
           
            }
        }
    }
}

 

using System;
using System.Text;

namespace ConsoleApplicationEnum
{
    public enum NoticeType   //C#枚举类型实例
    {  
        Notice = 'A', 
        LabRule = 'H',
        HotInformation = 'N', 
        Column = 'C', 
        All = '1',  
        Null = '0'
    } 

    class Program
    {
        static void Main(string[] args)
        {
            //新建C#枚举类型 
            NoticeType noticeType1 = NoticeType.Column;   
            //把C#枚举类型转换为string d = "Column"
            string d = noticeType1.ToString(); 
            //取得C#枚举类型的基数 dd='C'  
            char dd = (char)noticeType1;   
            //通过基数取得对应的C#枚举类型 noticeType2 = NoticeType.Notice
            //(NoticeType)'A';两种方式都可以 
            NoticeType noticeType2 = (NoticeType)Char.Parse("A");   
            //通过名称取得C#枚举类型 noticeType3 = NoticeType.Notice  
            NoticeType noticeType3 = (NoticeType)Enum.Parse(typeof(NoticeType), "Notice");
            NoticeType noticeType4 = (NoticeType)Enum.Parse(typeof(NoticeType), "49");
            Console.WriteLine(Convert.ToInt16('A'));
            string a = "hello";
            byte[] B = Encoding.ASCII.GetBytes(a);
            foreach (var bin in B)
            {
                Console.WriteLine(bin.ToString());
            }

            Console.WriteLine("noticeType4:" + noticeType4);
            Console.Read();
        }
    }
}

 

注意:

1,枚举数大小写敏感;

2,枚举不能放在函数中。枚举可以与类平级,也可以作为类的 field,但不能放在函数中。可以加 public 等修饰符。

3,简单枚举包含的值不用于组合,也不用于按位比较。 标志枚举应使用按位 OR 操作进行组合。

posted @ 2011-11-01 18:35  szjdw  阅读(259)  评论(0编辑  收藏  举报