Delphi技巧-用户自定义数据类型

时间:2010-01-29 08:55:59  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:这部分。你可能会认为其它编程语言也有诸如此类的类型构造器,确实如此,但是Pascal 是第一个完美实现这一理论的语言。至今仍然没有语言有能力定义那么多的数据类型。命名及不命名的类型为了后续使用或直接用于变量,需要给自定义类型命名。如果自定义一个命名的类型,你必须将代码放在特定的type区,如下所示:
  正文:Pascal 语言的一个重要特征是它能自定义数据类型。通过各种类型构造器,你可以定义自己的数据类型,如子界类型、数组类型、记录类型、枚举类型、指针类型和集合类型。最重要的用户定义数据类型是类(class),类是Object Pascal的面向对象扩展部分,本书不讨论这部分。

你可能会认为其它编程语言也有诸如此类的类型构造器,确实如此,但是Pascal 是第一个完美实现这一理论的语言。至今仍然没有语言有能力定义那么多的数据类型。

命名及不命名的类型
为了后续使用或直接用于变量,需要给自定义类型命名。如果自定义一个命名的类型,你必须将代码放在特定的type区,如下所示:


type
// subrange definition
Uppercase = 'A'..'Z';

// array definition
Temperatures = array [1..24] of Integer;

// record definition
Date = record
Month: Byte;
Day: Byte;
Year: Integer;
end;

// enumerated type definition
Colors = (Red, Yellow, Green, Cyan, Blue, Violet);

// set definition
Letters = set of Char;

你也可使用类型定义构造器直接定义一个变量,此时无需显式命名,如下面的代码:


var
DecemberTemperature: array [1..31] of Byte;
ColorCode: array [Red..Violet] of word;
Palette: set of Colors;

注意:一般来说,你应该避免使用上述不命名类型,因为你不能把它们作为参数传给例程,也不能用于声名同一类型的其他变量。实际上,Pascal的类型兼容规则是基于类型名的,而不是基于实际的类型定义。两个类型相同的变量仍有可能是不兼容的,除非他们的类型有完全相同的名字。对于不命名类型,需要编译器给它分配一个内部名字,因此对于数据结构复杂的变量,要习惯于定义命名数据类型,你一定不会为此白费工夫的。

但是上述自定义类型有什么意义呢?如果你不太熟悉Pascal类型构造器,通过下面内容你会了解它,此外下面还谈到了同类构造器在不同语言中的差异,因此如果你已熟知上面例举的类型定义,不妨往下读,你会对其中内容感兴趣的。最后,我将演示一些Delphi例子,并介绍一些能动态访问类型信息的工具。

子界类型
子界类型定义了某种类型的取值范围(因此定名subrange)。你可定义整数类型的子界类型,如取值从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

以上代码将导致一个编译错误:“Constant expression violates subrange bounds”。

如果代之以下面代码:


var
UppLetter: Uppercase;
Letter: Char;
begin
  Letter :='e';
  UppLetter := Letter;

"Delphi技巧-用户自定义数据类型"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Language/Delphi/12571.html

 1/5    1 2 3 4 5 下一页 尾页


关键字:

关于《Delphi技巧-用户自定义数据类型》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td