You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何泛型TArray的Create语法与其他类函数存在差异?

为什么Delphi中TArray的Create和Sort泛型语法不一致?

这个问题确实戳中了Delphi泛型设计里一个容易让人困惑的细节,我当初刚接触的时候也盯着代码愣了好一会儿!其实这种差异是有明确设计逻辑的,核心在于这两种调用的本质完全不同:

  • TArray<Integer>.Create(...) 的本质:实例化泛型类
    TArray本身是一个泛型类定义,TArray<Integer>是把这个泛型类“具体化”成了针对Integer类型的数组类。Create是这个具体化后的类的构造函数,所以必须先通过<Integer>指定类的泛型参数,得到具体的类后,才能调用它的构造函数创建实例。

    类似的例子还有TList<String>.Create()——你得先告诉编译器你要的是字符串类型的List类,才能调用它的构造。

  • TArray.Sort<Integer>(...) 的本质:调用泛型静态方法
    Sort是TArray类的一个静态泛型方法,这个方法本身带有独立的泛型参数,和TArray类自身的泛型定义无关。你不需要先实例化某个TArray<T>类,直接通过类名TArray调用这个工具方法即可,而<Integer>是用来指定这个Sort方法要处理的数组类型,所以要放在方法名后面。

    简单说:这里的泛型参数是给Sort方法用的,不是给整个TArray类用的。

总结一下,Delphi的泛型语法规则其实是统一的:

  • 如果是调用泛型类的成员,需要先在类名后指定类型参数,把类具体化后再调用成员;
  • 如果是调用类的泛型静态方法,类型参数直接放在方法名后,因为参数是属于方法本身的。

内容的提问来源于stack exchange,提问作者Fabrizio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 00:57:34