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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 离婚后前夫带孩子走了找不到怎么办 宜昌全视之眼逃出卢浮宫怎么办 qq号被盗了密保手机也被改怎么办 乐视盒子控播平台认证怎么办 购买冲气娃娃被发现了怎么办 买了充气娃娃太美舍不得扔怎么办 一品官老爷账号密码忘了怎么办 苹果手机加声音显示出耳机怎么办 被删除的照片恢复后效果变差怎么办 w10系统玩刺激战场声音小怎么办 宝宝不咳嗽但是喉咙有痰怎么办 深圳限行如果车堵在路上怎么办 奔跑吧qq中奖我填写资料怎么办 微信之前绑定的手机号丢了怎么办 龙之谷手游换装备洗炼材料怎么办 小学生在班上碰到流氓同学怎么办 问道手游仓库密码忘了怎么办 问道手游安全码忘了怎么办 问道手游账号密码忘了怎么办 坐一天一夜长途车腰疼怎么办 智联的简历一直说不完整怎么办 智联招聘简历投错了怎么办 投简历的公司写错面试时怎么办 从原单位辞职后档案一直没提怎么办 手机因一些不良软件扣费怎么办 苹果手机玩崩坏3卡顿怎么办 以前很帅现在变得好难看了怎么办 偷了室友东西被发现了该怎么办 自己不喜欢狗但室友养狗怎么办 夏天身上闷热出很多小红豆怎么办? 海棠果核小孩吃进肚子了怎么办 大了叶海棠有点烂根怎么办? 刚栽的月季花苗叶子蔫了怎么办 对节白蜡盆景叶尖干枯发黑怎么办 婴儿皮肤被大人指甲划出血怎么办 三岁宝宝吃了铝箔包装纸怎么办 元宝鱼烂身子烂鳍尾巴怎么办 大掌门2多余的侠客令怎么办 vivo手机关机后开不了机怎么办 红米手机重置后开机黑屏怎么办 dnf夏日套光环选错了怎么办