ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 认知枚举(C# Enum)

认知枚举(C# Enum)

原创 Linux操作系统 作者:草上爬 时间:2009-02-05 19:52:34 0 删除 编辑
当使用C#时对象都是在内存的堆(Heap)上创建和存取的,这些对象都是引用类型,而像int这样的基本类型以值类型对待,但是还有两个非常重要的类型也是值得我们关注的,它们就是枚举类型(enum)和结构类型(struct),很少能读到关于这两种C#类型的详细描述,但是有些时候它们甚至比类(class)还重要,所以我们必须对此进行深入研究,并合理利用之以便提升我们的程序性能。

我们首先来看下枚举(enum)。实际上枚举类型的变量,就是一个命名常量的集合,它们在C#下使用enum关键字进行声明,每一个enum类型都自动继承自System.Enum类,所以当我们对枚举类型变量进行操作时可以使用System.Enum类下的所有公开方法,可见我们也可以对"枚举类型的变量"称之为:实例化枚举类的对象。枚举类型其实也是一种值类型,所有数据都保存在堆栈(stack)上,而不是保存在堆(heap)上,也就是说我们无需事先分配内存,无需new一个enum类型的变量,直接声明即可使用。声明一个枚举类型的变量其实有点像设置一个数组的元素似的,例如:

enum Rating {Poor, Average, Okay, Good, Excellent}

我们还可以将枚举类型的变量作为函数参数进行传递,并且还可以对其进行算术运算,例如:

Rating IncrementRating(Rating r)
{
    if(r == Rating.Excellent)
        return r;
    else
        return r+1;
}
Rating DecrementRating(Rating r)
{
    if(r == Rating.Poor)
        return r;
    else
        return r-1;
}

上述函数都将Rating对象作为形参和返回参数,现在我们可以随意调用这两个函数,如下:

for (Rating r1 = Rating.Poor; r1 < Rating.Excellent ; r1 = IncrementRating(r1))
{
    Console.WriteLine(r1);
}

Console.WriteLine();

for (Rating r2 = Rating.Excellent; r2 > Rating.Poor; r2 = DecrementRating(r2))
{
    Console.WriteLine(r2);
}

我们还可以调用System.Enum类的公开方法。调用GetNames方法来返回枚举对象中的所有常量名称,例如:

foreach(string s in Rating.GetNames(typeof(Rating)))
    Console.WriteLine(s);

当一个类的方法需要传递一个自定义选项作为参数的时候,譬如,我们有个文件存取类,该类中有个Open方法,Open方法中有个参数需要传递类似:只读、只写、可读可写、新建、修改等等文件存取模式,当然你可以创建5个静态成员来满足上述要求,但是要想专业实现它,我们可以传递一个枚举类型的参数,这样我们的程序就强壮和高效许多,并且更加简洁易懂。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14325734/viewspace-545390/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2008-07-29

  • 博文量
    36
  • 访问量
    601612