枚举类型定义了一系列有序值的集合。枚举变量就是从这个既定的集合中取某个值。集合中的有序值可以称为元素,元素一般从0开始索引(也就是元素的顺序号)。
定义一个枚举类型,采用以下的格式:
type typeName = (val1, ..., valn)
其中typeName和每一个val都必须是有效的标识符。
VCL中有很多地方用到了枚举类型,比如Object Inspector中Form的BorderStyles属性就是,并且有一个下拉列表框选值,如下图:
我们举一个完整的例子来看看枚举的类型的方方面面。
1、新建一个Console Application。
2、然后我们直接输入下面的代码吧,请仔细看注释哟,如下:
- 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))
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中测试通过。
文章名称:浅析枚举的几种类型
URL链接:http://www.shufengxianlan.com/qtweb/news0/471900.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联