我个人的理解子界类型更适合用于范围的定义, 例如,人的年龄一般为1到120岁,一年中的月数为1到12月,一月中的天数为1到31天等等。
如果能在程序中对所用的变量的值域作具体规定,就便于检查出那些不合法的数据,这就能更好地保证程序运行的正确性且在一定程度上节省内存空间。
子界类型能很好解决上面的问题。其实在数组的定义中,常用到子界类型,以规定数组下标的范围。
这是Delphi特有的一种数据类型,至少在我的认知中其它语言是没有的
定义
type
子界类型标识符=常量1..常量2
常量1称为子界的下界,常量2称为子界的上界;所谓的上界也就是开始的边界,而下界就是结束的边界
注意事项:
下界和上界必须是同一顺序类型(该类型称为子界类型的基类型),且上界的序号必须大于下界的序号。 例如
type
age=1..100;
letter='a' ..'z';
当然了,类似于前面提到的枚举类型,它也可以把类型声明和变量声明并为一步。可以直接在变量说明中定义子界类型。
type
letter='a'..' z ';
var
ch1,ch2:letter;
可以合并成:
var
ch1,ch2:'a'..'d';
运算规则
凡可使用基类型的运算规则同样适用该类型的子界类型。例如,可以使用整型变量的地方,也可以使用以整型为基类型的子界类型数据。对基类型的运算规则同样适用于该类型的子界类型。例如,div,mod要求参加运算的数据为整, 因而也可以为整型的任何子界类型数据。基类型相同的不同子界类型数据可以进行混合运算。例如:设有如下说明:
var x:1..100;
y:1..500;
z:1..1000;
a:integer;
合法语句:
a:=Sqr(x)+y+z; z:=x+y
y:=x+z+a; 当x+y+a的值在1~500范围内时是合法的,否则会出错。
应用举例
例1、判断当前是周几
procedure TForm1.Button1Click(Sender: TObject);
var
Week: 1 .. 7;
begin
case Week of
1:
ShowMessage('周一');
2:
ShowMessage('周二');
3:
ShowMessage('周三');
4:
ShowMessage('周四');
5:
ShowMessage('周五');
6:
ShowMessage('周六');
7:
ShowMessage('周日');
else begin ShowMessage('非法')
end;
end;
end;