14.2.1 泛型类型兼容性规则
在传统的Pascal和Object Pascal中,核心类型兼容性规则基于类型名称的等价性。换句话说,只有当两个变量的类型名称相同时,它们才是类型兼容的,而不管它们所引用的实际数据结构。这是静态数组类型不兼容的经典示例(TypeCompRules
示例的一部分):
type
TArrayOf10 = array[1..10] of Integer;
procedure TForm30.Button1Click(Sender: TObject);
var
Array1: TArrayOf10;
Array2: TArrayOf10
Array3, Array4: array[1..10] of Integer;
begin
Array1 := Array2;
Array2 := Array3; // Error
// E2010 Incompatible types: 'TArrayOf10' and 'Array'
Array3 := Array4;
Array4 := Array1; // Error
// E2010 Incompatible types: 'Array' and 'TArrayOf10'
end;
正如您在上面的代码中所看到的,所有四个数组在结构上是相同的。然而,编译器只允许您对那些类型兼容的数组进行赋值,要么是因为它们的类型具有相同的显式名称(如TArrayOf10),要么是因为它们具有与在单个语句中声明的数组相同的隐式(编译器生成的)类型名称。
这种类型兼容性规则只有很少的例外,比如与派生类