我注意到我在通用TArray
语法中出现了一些不一致之处(这让我发疯...)
需要通过在函数名称之前前指定类型来调用“构造函数”函数。
MyArray := TArray<Integer>.Create(3,2,1);
其他类函数需要通过在函数名称后 之后指定类型
来调用TArray.Sort<Integer>(MyArray);
他们这样做是有道理的吗?
我注意到我在通用TArray
语法中出现了一些不一致之处(这让我发疯...)
需要通过在函数名称之前前指定类型来调用“构造函数”函数。
MyArray := TArray<Integer>.Create(3,2,1);
其他类函数需要通过在函数名称后 之后指定类型
来调用TArray.Sort<Integer>(MyArray);
他们这样做是有道理的吗?
通用数组的定义如下
TArray<T> = array of T;
这是动态数组的别名。动态数组具有固有的Create
方法。甚至是非通用的。
type
TMyDynArr = array of Integer;
....
arr := TMyDynArr.Create(0,1,2);
此Create
方法是编译器固有的。注意它如何接受任意数量的参数。
另一方面,存在类TArray
及其通用的Sort
方法。这是在RTL中实现的。请记住,TArray
从未实例化,它只是泛型类方法的所在地。
我的猜测是,将方法添加到动态数组类型需要编译器支持,因为它们是固有函数。但是添加到TArray
更简单,因为它是在RTL层完成的,不需要编译器支持。
您无法在此处进行任何更改,因此,不用担心。您无法更改。刚习惯。
,第一个TArray
是array of T
的系统类型定义。创作也可以这样写:
MyArray := [3,2,1];
第二个TArray
是Generics.Collections中定义的类。
他们彼此无关。
还要注意,使用泛型的TArray
类方法称为Parameterized Methods。
Type
TArray = class
...
class procedure Sort<T>(var Values: array of T); overload; static;
...
end;
这是减少代码重复的一种方法。