gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:41:44 26 4
gpt4 key购买 nike

Delphi是否支持lower/upper type bounds对于它的泛型,例如就像 Scala 那样?

我在 Embarcadero 文档中没有找到任何相关内容:

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

Constraint items include:

  • Zero, one, or multiple interface types
  • Zero or one class type
  • The reserved word "constructor", "class", or "record"

You can specify both "constructor" and "class" for a constraint. However, "record" cannot be combined with other reserved words. Multiple constraints act as an additive union ("AND" logic).

示例:

让我们看看以下 Scala 代码中的行为,该代码演示了上限类型限制的用法。我找到了那个例子on the net :

class Animal
class Dog extends Animal
class Puppy extends Dog

class AnimalCarer{
def display [T <: Dog](t: T){ // Upper bound to 'Dog'
println(t)
}
}

object ScalaUpperBoundsTest {
def main(args: Array[String]) {

val animal = new Animal
val dog = new Dog
val puppy = new Puppy

val animalCarer = new AnimalCarer

//animalCarer.display(animal) // would cause a compilation error, because the highest possible type is 'Dog'.

animalCarer.display(dog) // ok
animalCarer.display(puppy) // ok
}
}

在Delphi中有什么方法可以实现这样的行为吗?

最佳答案

在 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.

无法指定您链接到的文章中所示的下限,因为 Delphi 不支持这一点。它也不支持任何类型差异。

编辑:FWIW 在这种情况下, Display 方法甚至不必是通用的,并且狗参数可以只是 TDog 类型,因为您可以传递任何子类型。由于 Delphi 中泛型的功能有限,Display 方法不会从泛型中受益。

关于delphi - Delphi 泛型是否支持下/上类型界限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52479313/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com