delphi——用户自定义类型
来源:互联网 发布:和讯宏观数据 编辑:程序博客网 时间:2024/05/29 19:33
命名及不命名的类型
delphi如果自定义一个类型,必须将代码放在特定的type区域
type Uppercase='A'..'Z'; Temperatures=array[1..24] of Integer; Colors=(red,yellow,green,blue); Letters=set of Char;
子界类型
子界类型定义了某种类型的取值范围。你可以定义整数类型的子界类型,如取值从1到10或从100到1000,或者定义字符类型的子界类型,如下所示:
type Ten = 1..10; OverHundred = 100..1000; Uppercase = 'A'..'Z';
定义子界类型时,你不需要指定基类的名字,而只需提供该类型的两个常数。所用基类必须是有序类型,定义结果将是另一种有序类型。如定义一个子界变量,那么赋给该变量的值必须是子界定义范围内的值。下面代码是正确的:
var UppLetter: UpperCase;begin UppLetter := 'F';以下代码是错误的
var UppLetter: UpperCase;begin UppLetter := 'e'; // compile-time error
枚举类型
枚举类型又是一种自定义有序类型。在枚举类型中,你列出所有该类型可能取的值,而不是指定现有类型的范围。换句话说,枚举类型是个可取值的序列。见下例:
type Colors = (Red, Yellow, Green, Cyan, Blue, Violet); Suit = (Club, Diamond, Heart, Spade);
集合类型表示一组值,该组值由集合所依据的有序类型定义。定义集合的常用有序类型不多,一般为枚举类型或子界类型。如果子界类型取值为1..3,那么基于它的集合类型值可以是1、或2、或3、或1和2、或1和3、或2和3、或取所有3个数、或一个数也没有。
一个变量通常包含该类型对应的一个值,而集合类型可以不包含值、包含一个值、两个值、三个值,或更多,它甚至可以包含定义范围内所有的值。下面定义一个集合:
type Letters = set of Uppercase;现在我可以用上面类型来定义变量,并把原始类型的值赋给变量。为了在集合中表示一组值,需要用逗号将值隔开,最后用方括号结尾。下例显示了多值、单值和空值的变量赋值:
var Letters1, Letters2, Letters3: Letters;begin Letters1 := ['A', 'B', 'C']; Letters2 := ['K']; Letters3 := [];在Delphi中,集合一般用于表示有多种选择的标记。例如下面两行代码(摘自Delphi库)声明了一个枚举类型,其中列出了窗口条上可选的图标,并声明了相应的集合类型:
type TBorderIcon = (biSystemMenu, biMinimize, biMaximize, biHelp); TBorderIcons = set of TBorderIcon;
数组类型
数组类型定义了一组指定类型的元素序列,在方括号中填入下标值就可访问数组中的元素。定义数组时,方括号也用来指定可能的下标值。例如,下面的代码中定义了一个有24个整数的数组:
type DayTemperatures = array [1..24] of Integer;使用上述数组定义方法,定义一个DayTemperatures 类型的变量如下:
type DayTemperatures = array [1..24] of Integer;var DayTemp1: DayTemperatures;procedure AssignTemp; begin DayTemp1 [1] := 54; DayTemp1 [2] := 52; ... DayTemp1 [24] := 66; DayTemp1 [25] := 67; // compile-time error数组可以是多维的,如下例:
type MonthTemps = array [1..24, 1..31] of Integer; YearTemps = array [1..24, 1..31, Jan..Dec] of Integer;
记录类型
记录类型用于定义不同类型数据项的固定集合。记录中每个元素,或者说域,有它自己的类型。记录类型定义中列出了所有域,每个域对应一个域名,通过域名可以访问它。下面简单列举了记录类型的定义、类型变量的声明以及这类变量的使用:
type Date = record Year: Integer; Month: Byte; Day: Byte; end; var BirthDay: Date; begin BirthDay.Year := 1997; BirthDay.Month := 2; BirthDay.Day := 14;
指针
指针是存放指定类型(或未定义类型)变量内存地址的变量,因此指针间接引用一个值。定义指针不需用特定的关键字,而用一个特殊字符,这个特殊字符是脱字符号(^),见下例:
var P: ^Integer; X: Integer;begin P := @X; // change the value in two different ways X := 10; P^ := 20;如果定义了一个指针P,那么P表示指针所指向的内存地址,而P^表示内存所存储的实际内容。因此,在上面的代码中, P^ 与X相等。
除了表示已分配内存的地址外,指针还能通过New 例程在堆中动态分配内存,不过当你不需要这个指针时,你也必须调用Dispose 例程释放你动态分配的内存。
Delphi 还定义了一个Pointer 数据类型,它表示无类型的指针(就象C语言中的void* )。如果你使用无类型指针,你应该用GetMem 例程,而不是New例程,因为GetMem 例程能用于内存分配大小不确定的情况。
实际上,Delphi 中必须使用指针的情况很少,这是Delphi开发环境一个诱人的优点。虽然如此,若要进行高级编程和完全理解Delphi 对象模型,理解指针是很重要的,因为Delphi 对象模型在幕后使用了指针。
文件类型
另一个Pascal特定的类型构造器是文件类型(file)。文件类型代表物理磁盘文件,无疑是Pascal语言的一个特殊类型。按下面的方式,你可以定义一个新的数据类型:type IntFile = file of Integer;然后,你就能打开一个与这个结构相应的物理文件、向文件中写入整数、或者从文件中读取当前的值。
Pascal 文件类型的使用很直观,而且Delphi 中也定义了一些控件用于文件保存和装载,以及对数据流和数据库的支持。
0 0
- delphi——用户自定义类型
- Lua学习总结——用户自定义类型及资源管理
- Delphi技巧-用户自定义数据类型
- 用户自定义类型转换
- C++ 用户自定义类型
- Hibernate 用户自定义类型 UserType
- Python 中的用户自定义类型
- Lua-UserData(用户自定义类型)
- Lua C用户自定义类型
- ibatis 复杂类型(用户自定义类型)
- Delphi——类型PAnsiChar转换
- Delphi类型区分——常数
- Delphi类型区分——枚举
- Delphi类型区分——数组
- Delphi类型区分——集合
- delphi——自定义事件的实现
- Java处理Oracle中的用户自定义类型
- 边做边学Rust之用户自定义类型
- iOS开发笔记--视图切换的动画效果
- 【机器学习】主题模型(一):条件概率、矩阵分解
- 自然伽马测井基础知识
- 使用位图字体工具BMFont从图片生成自定义字体
- MyBatis接受参数的两种方法
- delphi——用户自定义类型
- 如何设计游戏中的道具功能(三)
- DevExpress控件XtraTreeList的使用心得
- Android Fragment基本介绍
- webservice soap简单的性能测试结论
- 转载-不能启动DBConsole服务
- “系统配置”模块-制作思路及流程
- 利用随机单词生成文本(《编程珠玑》第15章)
- 常用第三方sdk 整理