一个子界类型表示相应序数类型(在此叫做基类型base type)中值的子集。任何形如Low..High(这里,LowHigh是相同序数类型的常量表达式并且Low小于High)的结构,都表示一个子界类型,该子界包括LowHigh之间所有的值。例如,对于已声明的枚举类型
    type TColors = (Red, Blue, Green, Yellow, Orange, Purple, White, Black);
    可以定义如下子界类型
    type TMyColors = Green..White;
    这里,TMyColors包括GreenYellowOrangePurpleWhite等值。

    还可以用数字和字符(长度是1的串)定义子界类型:
    type
    SomeNumbers = -128..127;
    Caps = ‘A’..’Z’;

    用数字或字符常量定义子界时,基类型是包含指定范围的最小整数类型或字符类型。Low..High结构本身也可以作为类型名称,因此可以直接用于变量声明。例如:
    var SomeNum: 1..500;
    声明了一个整数变量,其值的范围是1到500。

    子界类型中每个值的序号与其基类型保持一致。(在上面第一个例子中,如果Color是一个值为Green的变量,那么表达式Ord(Color) 总返回2,而不管变量Color的类型是TColors还是TMyColors。)子界类型的值不会在子界的起点和终点循环,即使基类型是整数或字符类型;对子界类型的边界值递增或递减,只是对其基类型转换相应的值。因此,下面的语句
    type Percentile = 0..99;
    var I: Percentile;

    I := 100;
    将导致编译错误,而语句

    I := 99;
    Inc(I);
    将把值100赋给变量I (除非范围检查编译指示有效,即{$R+})。由此也可以看出,子界类型与其基类型的范围一致时,其临界值(最小值和最大值)之间是循环的。

    定义子界类型时,常量表达式的使用引出一个造句难点。对于任何类型声明,出现在等号(=)右边第一个有意义的字符如果是圆括号,那么编译器总是假定枚举类型将被定义。因此,
    const
    X = 50;
    Y = 10;
    type
    Scale = (X - Y) 2..(X + Y) 2;
    将导致编译错误。要避免此类问题,可以写成如下声明形式(编者注,相信在将来的Object Pascal版本中,这一问题会得到解决或改善):
    type
    Scale = 2 (X - Y)..(X + Y) 2;