C#锐利体验 第十四讲 枚举

转载 2004年09月06日 01:01:00

第十四讲 枚举<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

       枚举类型是C#中又一种轻量级的值类型,C#用枚举来表达一组特定的值的集合行为,比如Windows窗体可选的状态,按钮控件的风格等。下面的程序伪码展示了典型的枚举用法:
public enum WritingStyle
{  
    Classical,
    Modern,
    Elegant,
}
class Essay
{
    public void Write(WritingStyle writingStyle)
    {
        switch (writingStyle)
        {
            case WritingStyle.Classical:
                //
古典的写作风格
                break;
            case WritingStyle.Modern:
                //
现代的写作风格
                break;
            case WritingStyle.Elegant:
                //
典雅的写作风格
                break;
            default:
                throw(new System.ArgumentException("Invalid Writing Style"));
        }
    }
}
       
注意上面的枚举符号Classical,       Modern,       Elegant之间用逗号而不是分号来分隔。其中最后一个枚举值Elegant之后可以省去逗号分隔符。
       
和结构一样,C#中的枚举不允许也有自己的继承父类System.Enum,同样的,枚举不能被继承,也没有abstract一说。System.Enum类为枚举类型提供了很多好用的功能操作。比如我们可以通过GetName方法得到我们声明枚举值的字符串符号表示。下面的例子显示了一些比较常用的操作:

using System;
public enum WritingStyle
{  
    Classical,
    Modern,
    Elegant,
}
class Test
{
    public static void <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />Main()
    {
        WritingStyle dw=WritingStyle.Modern;

        Console.WriteLine(Enum.GetName(typeof(WritingStyle),dw));
        Console.WriteLine(dw.ToString());
        Console.WriteLine(Enum.GetUnderlyingType(typeof(WritingStyle)));
    }  
}
       
其中的最后一行输出了System.Int32,这是怎么回事?我们知道intSystem.Int32的简写形式,难道我们的WritingStyle枚举类型和整数int类型有什么关系吗?
是的,C#的枚举和整数值之间严格区分,比如我们就不能在上面的代码中作dw=1类似的赋值。但每个枚举值却的的确确都有一个整数类型的数值相对应,而且可以转换,只不过这种转换必须用明晰的转型语法来表达。我们知道在C#中整数类型有byte, sbyte, short, ushort, int, uint, long ,ulong共八种,那么C#的枚举值对应的是哪一种整数类型呢?它关系到我们的枚举类型能够容纳的枚举值的数量。实际上C#枚举类型支持这八种整数类型的任何一种,根据我们的需要,可以在声明枚举类型的时候来指定,如“public enum WritingStyle byte”就指定了它的枚举值的整数类型为byte。该类型可以通过上面所述的Enum.GetUnderlyingType方法来获得。如果不明确指定,C#将默认采用int类型作为枚举数值的类型。既然枚举值实际上也是一种整数值,那么它的大小呢?读者将下面的代码加在上面的Main函数内,就可看到结果了。
        foreach(object obj in Enum.GetValues(typeof(WritingStyle)))
        {
            Console.WriteLine(obj.ToString() +" : "+(int)obj);
        }
上面的代码将产生以下输出:
Classical : 0
Modern : 1
Elegant : 2
可以看到,C#默认地从0起为我们的枚举值赋了一个隐含的值。当然,我们也可以自己为枚举值指定数值:
public enum WritingStyle
{  
    Classical=0,
    Modern=10,
    Elegant=100,
}
我们甚至可以象下面这样,前提是我们必须保证编译时能够计算出他们各自的数值。
public enum WritingStyle
{  
    Classical=0,
    Modern=10+Classical,
    Elegant=10+Modern,
}
枚举值也拥有象整数那样的比较,逻辑,算术等操作行为,看下面的例子:
using System;
public enum WritingStyle
{  
    Classical=0,
    Modern=10+Classical,
    Elegant=10+Modern,
}
class Test
{
    public static void Main()
    {
        WritingStyle dw=WritingStyle.Modern;
        Console.WriteLine(dw+10);
        Console.WriteLine(dw+9);
    }  
}
当计算出来的数值等于某个枚举值的实际大小,那么显示的是该枚举值的符号名称,否则显示的将是整数值。

《视觉SLAM十四讲》书籍图片资源

chapter22-12-22-32-42-52-62-82-92-102-112-122-132-14chapter33-13-23-33-4chapter44-1chapter55-15-25-5...
  • NNNNNNNNNNNNY
  • NNNNNNNNNNNNY
  • 2017年04月29日 12:23
  • 2518

ACCP S1 C#第十四章 第十五章 上机练习

上机1,2using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys...
  • baidu_36074048
  • baidu_36074048
  • 2016年11月29日 16:54
  • 1201

C#枚举类型的常用操作总结

枚举类型是定义了一组“符号名称/值”配对。枚举类型是强类型的。每个枚举类型都是从system.Enum派生,又从system.ValueType派生,而system.ValueType又从system...
  • pengze0902
  • pengze0902
  • 2016年11月27日 19:45
  • 1100

C#中枚举类型的作用

C#中枚举类型的作用
  • syaguang2006
  • syaguang2006
  • 2014年04月24日 22:14
  • 1284

C# 枚举在项目中使用心得

阅读目录 基本介绍使用注意使用方法扩展用法     本文主要是我在项目中对C#枚举的使用心得,如有不足的地方欢迎您指出。 一、基本介绍 ...
  • jiangfei009003
  • jiangfei009003
  • 2016年09月14日 15:25
  • 3686

c#枚举 获取枚举键值对、描述等

using System; using System.Collections.Generic; using System.Collections.Specialized; using System.C...
  • smartsmile2012
  • smartsmile2012
  • 2016年09月29日 10:24
  • 3520

c#枚举值增加特性说明

通过特性给一个枚举类型每个值增加一个字符串说明,用于打印或显示。 自定义打印特性 [AttributeUsage(AttributeTargets.Field)] public class Enu...
  • jiangfei009003
  • jiangfei009003
  • 2017年05月12日 14:55
  • 341

C#中枚举的使用

C#枚举的使用 枚举的使用。 首先来看枚举是什么? 枚举类型是一种的值类型,它用于声明一组命名的常数。  一.声明: enum 枚举名 { 中间放入值. } 如: enum Student { 小...
  • meishengjie111
  • meishengjie111
  • 2017年10月18日 14:39
  • 366

C#中Enum枚举类型的简单使用

枚举类型的介绍:  枚举类型是由一组特定常量构成的一组数据结构,是值类型的一种特殊形式,当需要一个由指定常量集合组成的数据类型时,使用枚举类型。枚举声明可以显式地声明 byte、sbyte、shor...
  • sundacheng1989
  • sundacheng1989
  • 2013年05月22日 09:26
  • 18904

C#枚举类型、枚举类型与其他类型转换、结构类型、数组类型

1、 C#中的常量用constant标定,不能改变或赋值; 2、 枚举类型 [public ] enum 枚举名     // 访问标识符、枚举关键字、枚举名(符合Pascal命名规范) { 值1...
  • yanhuatangtang
  • yanhuatangtang
  • 2017年05月25日 16:08
  • 356
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#锐利体验 第十四讲 枚举
举报原因:
原因补充:

(最多只允许输入30个字)