为什么通用的TArray Create语法与其他类函数不同?

我注意到我在通用TArray语法中出现了一些不一致之处(这让我发疯...)

需要通过在函数名称之前指定类型来调用“构造函数”函数。

MyArray := TArray<Integer>.Create(3,2,1);

其他类函数需要通过在函数名称后 之后指定类型

来调用
TArray.Sort<Integer>(MyArray);

他们这样做是有道理的吗?

xinyu151100 回答:为什么通用的TArray Create语法与其他类函数不同?

通用数组的定义如下

TArray<T> = array of T;

这是动态数组的别名。动态数组具有固有的Create方法。甚至是非通用的。

type
  TMyDynArr = array of Integer;
....
arr := TMyDynArr.Create(0,1,2);

Create方法是编译器固有的。注意它如何接受任意数量的参数。

另一方面,存在类TArray及其通用的Sort方法。这是在RTL中实现的。请记住,TArray从未实例化,它只是泛型类方法的所在地。

我的猜测是,将方法添加到动态数组类型需要编译器支持,因为它们是固有函数。但是添加到TArray更简单,因为它是在RTL层完成的,不需要编译器支持。

您无法在此处进行任何更改,因此,不用担心。您无法更改。刚习惯。

,

第一个TArrayarray 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; 

这是减少代码重复的一种方法。

本文链接:https://www.f2er.com/2620692.html

大家都在问