淺析枚舉類型(Enumerated types)

來源:互聯網
上載者:User

枚舉類型定義了一系列有序值的集合。枚舉變數就是從這個既定的集合中取某個值。集合中的有序值可以稱為元素,元素一般從0開始索引(也就是元素的順序號)。

定義一個枚舉類型,採用以下的格式:

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

其中 typeName和每一個val都必須是有效標識符。

VCL中有很多地方用到了枚舉類型,比如Object InspectorFormBorderStyles屬性就是,並且有一個下拉式清單方塊選值,如:

我們舉一個完整的例子來看看枚舉的類型的方方面面。

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中測試通過。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.