Delphi类型区分——枚举
来源:互联网 发布:苹果cms插件 编辑:程序博客网 时间:2024/06/01 15:13
// ####Delphi枚举// 枚举————代表值的名字列表。// 用内建类型(如:Integer)也可以存储状态,枚举比内建数据更安全、更见名知义。// 枚举是有序类型。// 基于在类型定义中的出现次序,枚举元素自动地分配连续值。从第一个位置的0 开始到最后一个位置的n-1 结束。// ##枚举类型的定义// type 枚举类型标识符=(标识符1,标识符2,…,标识符n);// ##枚举类型数据特点// 1、枚举元素只能是标识符;// 例如,下列类型定义是合法的: type days=(sun,mon,tue,wed,thu,fri,sat); colors=(red,yellow,blue,white,black,green);// 而下列类型定义是错误的: type colortype=('red','yellow','blue','white'); numbers=(1,3,5,7,9);// 定义枚举类型时列出的所有枚举元素构成了这种枚举类型的值域(取值范围)。// 2、枚举类型属于顺序类型// 根据定义类型时各枚举元素的排列顺序确定元素的值,且值从0开始。// 例如,定义type days=(sun,mon,tue,wed,thu,fri,sat);// 则, ord(sun)=0,ord(mon)=1,……,以此类推。// 枚举类型中的第一个元素无前趋,最后一个元素无后继。pred(sat)=fri; succ(sun)=mon; ord(sat)=6; // 3、同一个枚举元素不能出现在两个或两个以上的枚举类型定义中。如下列定义是错误的: type color1=(red,yellow,white); color2=(blue,red,black); // 因为red属于枚举类型color1和 color2// 4、枚举类型变量只能进行赋值运算和关系运算,不能进行算术运算和逻辑运算。// 在枚举元素比较时,实际上是对其值的比较。// 例如定义如下: type days=(sun,mon,tue,wed,thu,fri,sat); colors=(red,yellow,blue,white,black,green); var color:colors; weekday:days;// 则下面语句是合法的: weekday:=mon;// if weekday=sun then write('rest');// 而下面语句是不合法的:// mon:=1; 错把枚举元素当成变量名;// weekday:=blue; 枚举值blue不属于枚举变量weekday的值域;// 5、可以把变量的说明与类型的定义合并在一起,如: var holiday,workday:(sun,mon,tue,wed,thu,fri,sat); color:(red,yellow,blue,white,black,green);// ##举例// TFontStyle的四种基本的字体风格:黑体、斜体、带下划线、加删除线。type TFontStyle = (fsBold, fsItalic, fsUnderline, fsStrikeOut);// ##用枚举定义数组边界// 按照经验规则,相对于原始的数组,TList 和TCollection 更为可取。// TList表和集合可以动态的伸缩、可以提供范围检查、排序、查找的功能,而这些是数组不具备的。// 用枚举定义数组边界,可以弥补数组短板,示例如下:type TNote = (doDo, doRe, doMi, doFa, doSo, doLa, doTi, doDo2 ); Procedure PlayNote( Note : TNote );const DoReMi : array[TNote] of Integer = (500, 600, 700, 800, 900, 1000, 1100, 1200 );begin Windows.Beep( DoReMi[Note], 750 ); Sleep(250);end;Procedure PlayNotes;var I : TNote;begin for I := Low(TNote) to High(TNote) do PlayNote( I );//在此处不需要范围检查end;// 定义枚举和其他精确化的类型具有累积效应。// 需要调试和测试的代码会逐渐减少,您的代码将更有效地运行。// ##预定义枚举类型// 所有的控件都具有 ControlStyle 特性,该类型定义为枚举值的集合。type TControlStyle = set of (csAcceptsControls, csCaptureMouse,csDesignInteractive, csClickEvents, csFramed, csSetCaption, csOpaque,csDoubleClicks, csFixedWidth, csFixedHeight, csNoDesignVisible,csReplicatable, csNoStdEvents, csDisplayDragImage, csReflector,csActionClient, csMenuEvents);// ##枚举类型的过程// Ord:返回正式,标识语气位置相关的枚举值// Pred:返回传给函数的值之前的枚举值// Succ:返回传给函数的值之后的枚举值// High:返回最大的枚举值// Low:返回最小的枚举值// 枚举是有序类型。// 基于在类型定义中的出现次序,枚举元素自动地分配连续值。从第一个位置的0 开始到最后一个位置的n-1 结束。// ##使用运行时类型信息(RTTI)// 如果包含了运行时类型信息(RTTI),则枚举的符号名也可以得到。uses typinfo;//该单元包括了与RTTI相关的过程,其中有GetEnumName和GetEnumValue//function GetEnumName(TypeInfo: PTypeInfo; Value: Integer): string;//function GetEnumValue(TypeInfo: PTypeInfo; const Name: string): Integer;{$M+} //{$M}指令指示编译器对TEnums 类型加入运行时类型信息。typeTEnums = ( Enum0, Enum1, Enum2, Enum3, Enum4);{$M-}procedure ShowEnum( Enum : TEnums );const MASK = '%s=%d';var Name : String; Value : Integer;begin Name := GetEnumName( TypeInfo(TEnums), Ord(Enum) ); Value := GetEnumValue( TypeInfo(TEnums), Name ); ShowMessage( Format( MASK, [Name, Value] ));end;procedure TestEnumerated;begin ShowEnum( Enum3 ); //Enum3=3 ShowEnum( Pred( Enum3 )); //Enum2=2 ShowEnum( Succ( Enum3 )); //Enum4=4 ShowMessage( IntToStr(Ord( Enum4 )) );//4 ShowEnum( Low(TEnums)); //Enum0=0 ShowEnum( High( TEnums )); //Enum4=4end;// 在创建组件和枚举时,运行时类型信息特别有用。枚举可以使代码更加健壮、富于表现力、可读性好。
阅读全文
0 0
- Delphi类型区分——枚举
- Delphi类型区分——常数
- Delphi类型区分——数组
- Delphi类型区分——集合
- 枚举类型的区分
- Delphi 枚举类型
- Delphi 枚举类型
- Delphi中枚举类型的应用
- delphi 枚举类型与字符串的转换
- Delphi中枚举类型的应用
- delphi中遍历枚举类型的方法
- Delphi中枚举类型的应用
- enum枚举类型——基本类型
- Delphi枚举类型,子界类型简单测试
- C++11强类型枚举——枚举类
- 【读书笔记】TiJava——枚举类型
- 枚举——复合值类型
- 黑马程序员——枚举类型
- 考研路茫茫——早起看书
- 数据库简单优化
- 【模板】快速幂
- Eclipse使用Maven搭建Spring Boot应用并访问数据库
- jsp在浏览器与服务器之间的交互原理
- Delphi类型区分——枚举
- Unity 全局雾效Shader:基于摄像机距离的雾效渲染
- NIFI 集群配置 Clustering Configuration
- 测试环境?
- 01背包使用滚动数组优化详细讲解
- 电热管该如何使用
- es集群搭建(2个节点)
- thymeleaf 学习笔记-基础篇(中文教程)
- google analytics 添加跟踪代码