Delphi泛型类和动态数组

Raf*_*ssi 1 arrays delphi

我曾在多次读取的回答这个有关的问题TArray<T>array of T.根据我的理解,第一个的使用比后者更通用,因为对于动态数组我应该声明类似......

type
   TMyFlexibleArray = array of Integer;
Run Code Online (Sandbox Code Playgroud)

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

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


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

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

Dav*_*nan 7

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

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

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

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


你还别说类TArraySystem.Generics.Collections.这是一个静态类,包含搜索和排序数组的方法.它与任何动态数组类型完全不同,并且在这里分散注意力.虽然名字相近,TArray<T>而且TArray这些是完全不同的事情.忽略TArray这个问题的目的.