子界类型

子界类型


子界类型定义了某种类型的取值范围(因此定名 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 编译会通过,但在运行时,如果你开启了范围检查编译选项(在工程选项对话框的编译器页设置),你将得到 Range check error (范围检测错误)信息。

注意:建议你在开发程序时开启上述编译选项,以使程序更健壮并易于调试。这样即使遇上错误,你也会得到一个明确的信息而不是难以琢磨的行为。最终完成程序时你可以去掉这个选项,使程序运行得快一些,不过影响很小。因此我建议你开启所有运行时的检测选项,如溢出检查和堆栈检查,甚至提交程序时仍然保留它们。  


联系电话:
020-00000000
联系电话:
020-00000000
联系电话:
020-12345678