浅析枚举的几种类型

开发 开发工具
我们今天要谈谈枚举的几种类型,枚举类型定义了一系列有序值的集合。集合中的有序值可以称为元素,元素一般从0开始索引,

  枚举类型定义了一系列有序值的集合。枚举变量就是从这个既定的集合中取某个值。集合中的有序值可以称为元素,元素一般从0开始索引(也就是元素的顺序号)。

  定义一个枚举类型,采用以下的格式:

  type typeName = (val1, ..., valn)

  其中typeName和每一个val都必须是有效的标识符。

  VCL中有很多地方用到了枚举类型,比如Object InspectorFormBorderStyles属性就是,并且有一个下拉列表框选值,如下图:

我们举一个完整的例子来看看枚举的类型的方方面面。

  1、新建一个Console Application

  2、然后我们直接输入下面的代码吧,请仔细看注释哟,如下:

 

  1.   program Project1;  
  2.   {$APPTYPE CONSOLE}  
  3.   uses  
  4.   SysUtils;  
  5.   { type中定义枚举类型}  
  6.   type  
  7.   TSize = (Small = 5, Medium = 10, BeforLarge, Large = Small + Medium);  
  8.   { TSize中因为Medium被索引为10,Small被索引为5,所以Large的索引为10 + 5 = 15}  
  9.   TMyColor = (mcRed, mcBlue, mcGreen, mcYellow, mcOrange);  
  10.   {mcRed = 0, mcBlue = 1, mcGreen = 2, mcYellow = 3, mcOrange = 4}  
  11.   TAnswer = (ansYes, ansNo, ansMaybe = 1);  
  12.   { ansMaybe 为 1, 那么ansYes = 0, ansNo = 1}  
  13.   var  
  14.   Size: TSize; { 声明TSize枚举类型的变量}  
  15.   MyColor: TMyColor;  
  16.   Answer: TAnswer;  
  17.   MyCard: (Club, Diamond, Heart, Spade); { 也可以这样直接声明}  
  18.   //Card1: (Club, Diamond, Heart, Spade);  
  19.   { 此句编译后导致错误,提示"Identifier redeclared"}  
  20.   begin  
  21.   Size := BeforLarge; { Ord(Size) = 11}  
  22.   Writeln('BeforLarge在TSize中的索引为:' + IntToStr(Ord(Size)));  
  23.   { 显示11,因为Medium被索引为10,因此其后序索引为11}  
  24.   Size := Large; { Ord(Size) = 15}  
  25.   Writeln('Large在TSize中的索引为:' + IntToStr(Ord(Size))); { 显示11}  
  26.   Size := TSize(6); { Ord(Size) = 6}  
  27.   Writeln('TSize(6)在TSize中的索引为:' + IntToStr(Ord(Size))); { 显示6}  
  28.   Inc(Size); { Ord(Size) = 7}  
  29.   Writeln('Inc(Size)在TSize中的索引为:' + IntToStr(Ord(Size))); { 显示7}  
  30.   { 我们来看看TAnswer中元素的索引}  
  31.   Answer := ansYes;  
  32.   Writeln('ansYes在TAnswer中的索引为:' + IntToStr(Ord(Answer)));  
  33.   Answer := ansNo;  
  34.   Writeln('ansNo在TAnswer中的索引为:' + IntToStr(Ord(Answer)));  
  35.   Answer := ansMaybe;  
  36.   Writeln('ansMaybe在TAnswer中的索引为:' + IntToStr(Ord(Answer)));  
  37.   { 因为ansNo和ansMaybe具有相同的索引值,所以两个元素表现为相同值}  
  38.   Readln;  
  39.   end. 

 

  3、运行,以检验结果,如下:

Note

  Enumerated constants without a specific value have RTTI(不指定元素的索引的枚举类型可以生成运行时类型信息(RTTI))

  type SomeEnum = (e1, e2, e3);

  whereas enumerated constants with a specific value, such as the following, do not have RTTI:(指定了元素索引的枚举类型将不可以生成运行时类型信息,如下所示)

  type SomeEnum = (e1 = 1, e2 = 2, e3 = 3);

  以上代码均在Delphi7中测试通过。

原文链接:http://www.cnblogs.com/pchmonster/archive/2011/12/23/2300039.html

【编辑推荐】

  1. Java和C++在细节上的差异:枚举与反射
  2. C++的中的结构体和枚举
  3. WCF枚举实现技巧总结
  4. VB.NET枚举增加编程速率
  5. WCF枚举类型使用注意事项介绍
责任编辑:彭凡 来源: 博客园
相关推荐

2010-03-12 17:29:16

Python模块

2009-08-18 09:37:14

C#枚举类型

2009-08-18 10:35:46

C#枚举类型

2009-08-18 12:52:33

C#枚举类型

2009-09-14 15:12:30

XML节点类型

2022-06-27 11:09:06

边缘计算

2009-08-18 13:00:59

C#枚举类型

2009-07-07 18:06:14

JDK1.5枚举类型

2021-12-20 23:24:40

前端测试开发

2009-08-18 09:51:18

C#枚举类型

2009-08-18 10:41:38

C#枚举类型

2022-06-27 09:45:22

MySQL索引

2010-02-04 11:32:01

数据交换技术

2010-04-16 14:39:54

ORACLE锁

2022-02-25 14:06:01

区块链生态系统技术

2021-09-09 13:53:08

区块链加密货币技术

2020-12-30 07:55:37

C++转换类型

2021-03-11 14:46:05

C++类型转换语言

2022-08-31 07:04:50

Bean作用域

2022-03-11 15:40:49

PaaS云服务
点赞
收藏

51CTO技术栈公众号