浅析枚举类型(Enumerated types)
枚举类型定义了一系列有序值的集合。枚举变量就是从这个既定的集合中取某个值。集合中的有序值可以称为元素,元素一般从0开始索引(也就是元素的顺序号)。
定义一个枚举类型,采用以下的格式:
type typeName = (val1, ..., valn)
其中 typeName和每一个val都必须是有效的标识符。
VCL中有很多地方用到了枚举类型,比如Object Inspector中Form的BorderStyles属性就是,并且有一个下拉列表框选值,如下图:
我们举一个完整的例子来看看枚举的类型的方方面面。
1、新建一个Console Application。
2、然后我们直接输入下面的代码吧,请仔细看注释哟,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | program Project1; {$APPTYPE CONSOLE} uses SysUtils; { type中定义枚举类型} type TSize = (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} var Size: TSize; { 声明TSize枚举类型的变量} MyColor: TMyColor; Answer: TAnswer; MyCard: (Club, Diamond, Heart, Spade); { 也可以这样直接声明} //Card1: (Club, Diamond, Heart, Spade); { 此句编译后导致错误,提示"Identifier redeclared"} begin Size := 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))
1type
SomeEnum = (e1, e2, e3);
whereas enumerated constants with a specific value, such as the following, do not have RTTI:(指定了元素索引的枚举类型将不可以生成运行时类型信息,如下所示)
1type
SomeEnum = (e1 =
1
, e2 =
2
, e3 =
3
);
以上代码均在Delphi7中测试通过。
posted on 2011-12-23 23:08 pchmonster 阅读(2621) 评论(4) 编辑 收藏 举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验