Delphi泛型类和动态数组

时间:2016-12-20 21:51:42

标签: arrays delphi

我在this关于TArray<T>array of T的问题中多次阅读了答案。根据我的理解,第一个的使用比后者更通用,因为对于动态数组我应该声明类似的类型......

type
   TMyFlexibleArray = array of Integer;

...这是必要的(在某些情况下)因为我不能返回array of Integer例如。相反,当然,我可以返回泛型类型。动态数组没有固定长度,并且使用SetLength过程重新分配它们的内存。 TArray是一个静态方法的泛型类;有关它的文档说明:

  

您不应该创建此类的实例,因为它只是   目的是提供排序和搜索静态方法。

它们具有两种不同的性质/功能但是它们具有相同的结果(例如,当作为参数传递时或者当我只需要一个灵活的容器时)?我看到TArray也有一些有用的方法。

如果我说TArray<T>是使用泛型构建的动态数组并且type K = array of T是一个自己的动态数组(自定义数组),那是正确的吗?在我的问题中,我假设它们在动态数组的功能上是等价的(我更喜欢通用的方式以获得舒适性)。

1 个答案:

答案 0 :(得分:7)

通用动态数组和非通用动态数组在各方面都是相同的,除了它们的通用性或其他性质。这是唯一的区别。

这种差异推动了在少数情况下的决策制定,其中一个可以使用但不能使用另一个。例如:

  • 由于您的问题中列出的原因,在使用泛型类型时有时需要通用数组。
  • 另一方面,在编写希望在早期泛型的旧编译器上编译的代码时,则不能使用泛型数组。

如果这看起来很明显,那是因为它是。通用和非通用数组之间确实只有这一个区别。

您还提到了来自TArray的课程System.Generics.Collections。这是一个静态类,包含搜索和排序数组的方法。它与任何动态数组类型完全不同,并且在这里分散注意力。虽然名称相似,但TArray<T>TArray这些是完全不同的东西。出于此问题的目的,请忽略TArray