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

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

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

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

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

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

1、新建一个Console Application

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

program Project1;
{$APPTYPE CONSOLE}
usesSysUtils;
{ type中定义枚举类型}
typeTSize = (Small = 5, Medium = 10, BeforLarge, Large = Small + Medium);{ TSize中因为Medium被索引为10,Small被索引为5,所以Large的索引为10 + 5 = 15}TMyColor = (mcRed, mcBlue, mcGreen, mcYellow, mcOrange);{mcRed = 0, mcBlue = 1, mcGreen = 2, mcYellow = 3, mcOrange = 4}TAnswer = (ansYes, ansNo, ansMaybe = 1);{ ansMaybe 为 1, 那么ansYes = 0, ansNo = 1}
varSize: TSize;            { 声明TSize枚举类型的变量}MyColor: TMyColor;Answer: TAnswer;MyCard: (Club, Diamond, Heart, Spade);  { 也可以这样直接声明}//Card1: (Club, Diamond, Heart, Spade);{ 此句编译后导致错误,提示"Identifier redeclared"}
beginSize := BeforLarge; { Ord(Size) = 11}Writeln('BeforLarge在TSize中的索引为:' + IntToStr(Ord(Size)));{ 显示11,因为Medium被索引为10,因此其后序索引为11}Size := Large;      { Ord(Size) = 15}Writeln('Large在TSize中的索引为:' + IntToStr(Ord(Size)));      { 显示11}Size := TSize(6);   { Ord(Size) = 6}Writeln('TSize(6)在TSize中的索引为:' + IntToStr(Ord(Size)));   { 显示6}Inc(Size);          { Ord(Size) = 7}Writeln('Inc(Size)在TSize中的索引为:' + IntToStr(Ord(Size)));  { 显示7}{ 我们来看看TAnswer中元素的索引}Answer := ansYes;Writeln('ansYes在TAnswer中的索引为:' + IntToStr(Ord(Answer)));Answer := ansNo;Writeln('ansNo在TAnswer中的索引为:' + IntToStr(Ord(Answer)));Answer := ansMaybe;Writeln('ansMaybe在TAnswer中的索引为:' + IntToStr(Ord(Answer)));{ 因为ansNo和ansMaybe具有相同的索引值,所以两个元素表现为相同值}Readln;
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中测试通过。

浅析枚举类型(Enumerated types)相关推荐

  1. enum枚举类型用法

    文章目录 1. 枚举类型和枚举变量 1.1 枚举类型的定义和声明 1.2 枚举变量的定义和声明 2. 枚举变量和枚举常量的关联对应 3. 枚举类型和变量的应用 3.1 作为判断语句中的逻辑 3.2 一 ...

  2. 《Java SE实战指南》06-08:枚举类型(Enumerated types)

    内容导航: 前言 1.定义 2.使用场景 3.高阶应用 前言 在现实场景中,我们发现某类事物包含的名称.范围和含义是有限的,都可以列举出来. 方向:北.南.东.西: 季节:春季.夏季.秋季.冬季: 月 ...

  3. c语言枚举类型编程,浅析C语言枚举类型

    在学习C语言的结构体过程中,我们接触到比较重要的内容要数枚举类型这一环了.那么到底什么是C语言中的枚举类型呢?它在我们编写程序时又起着什么样的作用呢?下面课课家小编就为大家简单介绍C语言中的枚举类型和 ...

  4. 巧用 TypeScript Literal Types 模拟枚举类型

    看下面这个例子: let x: "hello" = "hello"; // OK x = "hello"; // ... x = " ...

  5. java枚举对象作用_浅析Java编程中枚举类型的定义与使用

    定义枚举类型时本质上就是在定义一个类,只不过很多细节由编译器帮您补齐了,所以某些程度上,enum关键字的 作用就像是class或interface. 当您使用"enum"定义枚举类 ...

  6. Emun 枚举类型使用浅析——包括enumSet enumMap

    啥也不说了,直接贴代码~记录一下,方便以后使用. 请执行TestEnum类查看效果~ 1.Enum 类Color /*** */ package hpf.test;import java.util.E ...

  7. enum枚举类型用法浅析

    定义: 枚举类型定义用关键字enum标识,形式为: enum 标识符 { 枚举数据表 }: (1)enum是关键字,标识枚举类型.定义枚举类型必须用enum开头. (2)枚举数据表中的名字是程序员自己 ...

  8. 在java中关于枚举类型的特性_java枚举类型小结

    JDK5.0之前,我们一般选择使用 interface 来保存常量组,以此来弥补 JDK 中没有枚举类型的缺陷,从JDK5.0开始,Sun引进了一个全新的关键字 enum 来定义一个枚举类.同inte ...

  9. DELPHI设置枚举类型size

    delphi枚举类型长度默认为2个字节(单字),而在C中枚举为4个字节(双字),如果需要跨这两个平台编程,传输结构时会由于数据长度不一造成灾难. 经过查找资料,原来delphi可以通过{$Z+} {$ ...

最新文章

  1. 【Harvest源码分析】GetF0CandidateContour函数
  2. jsp中如何运行java_从上帝视角看Java如何运行
  3. Markdown创建页面和目录?
  4. php弹出第一个数组中,PHP array_search始终返回数组的第一个键
  5. leetcode15. 三数之和(三指针)
  6. android int 首位值_Android应用视图的管理者Window
  7. 百度SEO站群最新易支付源码完整版 已pj全解密
  8. JS-函数(匿名-自调用-回调)-递归
  9. Android系统Camera录像过程分析
  10. python迭代计算pi_python使用三角迭代计算圆周率PI的方法
  11. 简单实用的易语言短信接口demo
  12. Python代码转EXE程序
  13. 根据数据文件sql生成报告rpt
  14. php 改变图片大小,如何把照片尺寸改小 电子照片尺寸怎么改
  15. IDEA如何新建一个source folder
  16. linux无法访问移动硬盘,移动硬盘“无法访问”的解决方案
  17. Windows 下 VS 配置 OpenGL 环境
  18. puts()函数详解
  19. PCL学习笔记一入门(更新中)
  20. NLP入门:pyltp的介绍与使用

热门文章

  1. PowerShell 学习笔记——运行命令
  2. 【译】OpenDaylight控制器:YANG Schema和Model
  3. MongoDB 安全 checklist 及最优配置模板
  4. Spring MVC + Hibernate JPA + Bootstrap 搭建的博客系统
  5. String indexOf 算法
  6. VS2010 SP1 Beta与VisualSVN的冲突引起VS2010关闭时重启
  7. Cisco 路由器防火墙配置命令及实例
  8. 导致甲骨文裁员的原因有哪些?
  9. 掌握 Angular2 的表单 - Angular2 系列 (4)
  10. 实战:将静态路由发布到动态路由