Delphi泛型是否支持类型下限/上限?

Delphi泛型是否支持类型下限/上限?,delphi,generics,type-bounds,Delphi,Generics,Type Bounds,Delphi是否支持/支持其泛型,例如Scala 我在Embarcadero文件中没有找到任何相关信息: 此外,在“泛型中的约束”中有一个针对类型边界的隐式提示: 约束项包括: 零、一或多个接口类型 零类或一类类型 保留字“构造函数”、“类”或“记录” 可以为约束指定“构造函数”和“类”。 但是,“记录”不能与其他保留字组合。 多个约束充当加法并集(“AND”逻辑) 示例: 让我们看看下面Scala代码中的行为,它演示了上限类型限制的用法。我发现这个例子: 类动物 狗类动物 班犬

Delphi是否支持/支持其泛型,例如Scala

我在Embarcadero文件中没有找到任何相关信息:

此外,在“泛型中的约束”中有一个针对类型边界的隐式提示:

约束项包括:

  • 零、一或多个接口类型
  • 零类或一类类型
  • 保留字“构造函数”、“类”或“记录”
可以为约束指定“构造函数”和“类”。 但是,“记录”不能与其他保留字组合。 多个约束充当加法并集(“AND”逻辑)

示例:

让我们看看下面Scala代码中的行为,它演示了上限类型限制的用法。我发现这个例子:

类动物
狗类动物
班犬
类动物饲养员{

def display[T在Delphi中,此示例如下所示(代码):

类型
TAnimal=类别(TObject);
TDog=等级(TAnimal);
TPuppy=等级(时差);
TAnimalCarer=类
程序显示(狗:T);
结束;
变量
动物:塔尼马尔;
狗:时差;
小狗:TPuppy;
动物饲养者:塔尼马尔卡尔;
开始
//animalCarer.Display(动物);//[dcc32错误]E2010不兼容类型:“T”和“TAnimal”
动物展示(狗);
动物展览(小狗);
结束。
由于Delphi不支持下限,因此无法指定链接到的文章中所示的下限。它也不支持任何类型差异


编辑:FWIW在这种情况下,显示方法甚至不必是泛型的,dog参数可以是TDog类型,因为您可以传递任何子类型。由于Delphi中泛型的功能有限,显示方法将不会受益于泛型。

我想您需要。@erip Delphi不支持协变或逆变。
type
  TAnimal = class(TObject);

  TDog = class(TAnimal);

  TPuppy = class(TDog);

  TAnimalCarer = class
    procedure Display<T: TDog>(dog: T);
  end;

var
  animal: TAnimal;
  dog: TDog;
  puppy: TPuppy;
  animalCarer: TAnimalCarer;
begin
//  animalCarer.Display(animal); // [dcc32 Error] E2010 Incompatible types: 'T' and 'TAnimal'
  animalCarer.Display(dog);
  animalCarer.Display(puppy);
end.