zoukankan      html  css  js  c++  java
  • 浅析枚举类型(Enumerated types)

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

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

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

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

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

    0049

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

    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、运行,以检验结果,如下:

    0047

    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中测试通过。

  • 相关阅读:
    有关怎样入门ACM
    在线安装eclipse中html/jsp/xml editor插件(很可靠)
    如何才干高速成为优秀的程序猿
    JavaScript必知的特性(继承)
    Maven构建真正的J2EE项目
    HLJU 1223: 寻找区间和 (交替推进法)
    重要经验五:block作为属性的注意事项
    Android Studio第一次启动的Fetching android sdk component information的问题
    树莓派学习笔记——apt方式安装opencv
    大型项目开发: 隔离 (《大规模C++程序设计》书摘)
  • 原文地址:https://www.cnblogs.com/pchmonster/p/2300039.html
Copyright © 2011-2022 走看看