Delphi类型区分——数组

 
 
// ####Delphi数组

// ##数组异常
// 数组定义了索引的范围,限定了数组中可能的元素数目以及每个元素的索引值。
// 如果数组索引越界,就会发生异常。

// ##边界检查
// 选中边界检查选项,编译器将向编译后的应用程序添加代码。
// 如果程序存在数组索引越界,
// 如果了Project Options->Compiler->Range Checking,
// 程序在运行时会引发程序在运行时会引发ERangeError 异常;
// 如果没有勾选Range Checking,
// 程序可能会引发EAccessViolation 异常,也可能不出现异常。
var
S : array[1..10] of string;
I : integer;
begin
I := 11;
S[I] := 'Delphi 6 Developer s Guide';
//S[11] := 'Written by Paul Kimmel';
end;
// {$R}编译器指令可以在相关编译器指令之间添加局部的边界检查代码。

// ##定义子界值
// 数组就可以使用诸如字符、布尔值、枚举或整数等类型值进行索引。
type
  TIntegerRange = 1..10000;
var
  Ints : array[TIntegerRange] of Integer;
  
// ##使用类型减少边界错误
// 为减少对数组进行索引时的越界错误,
// 可以使用枚举类型、类型别名或新的类型以确保所有的索引都在可接受的范围之内。

Procedure ArrayRange;
type
  TEnums = (Enum1, Enum3, Enum4);
  TAlias = byte;
  TChar = type Char;
var
  E : array[TEnums] of string;	//枚举
  A : array[TAlias] of char;	//声明了byte 类型的别名
  C : array[TChar] of byte;		//使用type newtype = type oldtype 来引入新的、独立的类型。
begin
  E[Enum1] := 'An enumerated index.';
  A[255] := #65;
  C['C'] := 255;
  ShowMessage( E[Enum1] );
  ShowMessage( A[255] );
  ShowMessage( IntToStr(C['C']) );
end;
// 当使用类型别名时,至少可以提高代码的可读性。
// 如果使用引入的新类型,则编译器可以进行一些帮助。
// 对于数组索引,请尽可能使用枚举、类型别名和新的类型,而不要使用内建类型。

// ##下界与上界函数
// 可以使用Low 和High 两个函数,以确保使用数组时索引没有越界。
type
  TLimit = 1..100;
var
  PreferableStyle : array[TLimit] of integer;
  J : TLimit;
begin
  for J := Low(TLimit) to High(TLimit) do
  PreferableStyle[J] := J;
end;


 
 

//事务处理状态
//方式一:
//type
//  ProcessState = (psUntreated, psProcessing, psSuspend, psComplete);
//const
//  ProcessStateSM: array[ProcessState]of string = ('未处理','处理中','已暂停','已完成');
//方式二:
var //const和var都可以编译通过
  ProcessStateSM: array[0..3]of string = ('未处理','处理中','已暂停','已完成');
 

猜你喜欢

转载自blog.csdn.net/liang08114/article/details/78804751
今日推荐