如何在派生类型中使用泛型方法

这似乎很简单,也许我只是缺少一些语法胶水。这是我简单的通用(Delphi XE3)示例:

unit Unit1;

interface

uses
  generics.collections;

type

X = class
public
  Id: Integer;
end;

XList<T : X> = class( TObjectList<T> )
 function Find(Id: Integer) : T;
end;

Y = class(X)

end;

YList = class(XList<Y>)
end;

implementation

{ XList<T> }

function XList<T>.Find(Id: Integer): T;
var
  t: X;
begin
  for t in Self do
    if t.Id = Id then
      Result := t;
end;

end.

无法使用“ [dcc32错误] Unit1.pas(41):E2010不兼容的类型:“ Y”和“ X””进行编译。关键在于:

YList = class(XList<Y>)
end;

Y是从X派生出来的,为什么会有问题呢?

亚历克斯

我必须重新实现Find方法,如下进行修复:

{ XList<T> }

function XList<T>.Find(Id: Integer): T;
var
  item: T;
begin
  for item in Self do
    if item.Id = Id then
      Exit(item);
  Result := nil;
end;

What's这里重要的是,以取代从变量声明中使用的类型XT

然后,我只是改名从变量t,以item避免名称冲突与类型占位符T和raplaced将Result := item通过Exit(item)返回找到的项目和退出方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在派生类型中使用泛型方法

来自分类Dev

如何在C#中使用派生类型重写泛型方法

来自分类Dev

在C#中的基类中使用泛型:如何确保基类中的方法返回派生类的类型?

来自分类Dev

如何在方法参数中使用泛型类型投影?

来自分类Dev

如何在扩展方法中使用泛型类型成员?

来自分类Dev

如何在非泛型静态类的多个方法中使用相同的泛型类型

来自分类Dev

如何定义一个泛型方法来返回派生类类型的实例?

来自分类Dev

通过派生类型使用反射调用泛型基类上的方法

来自分类Dev

如何在baseclass方法中使用派生类变量

来自分类Dev

派生类型和泛型

来自分类Dev

如何在类中使用扩展的泛型类型的类型?

来自分类Dev

用派生泛型类型的派生类实例调用方法

来自分类Dev

如何在Nim中使用默认泛型类型?

来自分类Dev

如何在基类的方法中使用泛型指定out参数的类型?

来自分类Dev

如何获取在数组的方法中使用的泛型类型?

来自分类Dev

Fortran 90,如何在子例程中使用派生类型中定义的数组

来自分类Dev

C# - 接口泛型方法约束以匹配派生类型

来自分类Dev

从特定的工厂方法参数值派生类的泛型类型

来自分类Dev

是否可以从派生类型引用定义泛型?

来自分类Dev

如何在Java方法中使用泛型

来自分类Dev

如何在方法声明中使用泛型

来自分类Dev

如何在列表派生类中使用列表理解

来自分类Dev

如何在派生类和方法调用中使用mypy?

来自分类Dev

将派生类型的泛型转换为父类型的泛型

来自分类Dev

在派生类型中使用异步属性

来自分类Dev

如何在HashMap中使用泛型?

来自分类Dev

如何在Scala中使用泛型

来自分类Dev

如何在Scala中使用泛型

来自分类Dev

如何从虚拟函数返回泛型派生类?

Related 相关文章

  1. 1

    如何在派生类型中使用泛型方法

  2. 2

    如何在C#中使用派生类型重写泛型方法

  3. 3

    在C#中的基类中使用泛型:如何确保基类中的方法返回派生类的类型?

  4. 4

    如何在方法参数中使用泛型类型投影?

  5. 5

    如何在扩展方法中使用泛型类型成员?

  6. 6

    如何在非泛型静态类的多个方法中使用相同的泛型类型

  7. 7

    如何定义一个泛型方法来返回派生类类型的实例?

  8. 8

    通过派生类型使用反射调用泛型基类上的方法

  9. 9

    如何在baseclass方法中使用派生类变量

  10. 10

    派生类型和泛型

  11. 11

    如何在类中使用扩展的泛型类型的类型?

  12. 12

    用派生泛型类型的派生类实例调用方法

  13. 13

    如何在Nim中使用默认泛型类型?

  14. 14

    如何在基类的方法中使用泛型指定out参数的类型?

  15. 15

    如何获取在数组的方法中使用的泛型类型?

  16. 16

    Fortran 90,如何在子例程中使用派生类型中定义的数组

  17. 17

    C# - 接口泛型方法约束以匹配派生类型

  18. 18

    从特定的工厂方法参数值派生类的泛型类型

  19. 19

    是否可以从派生类型引用定义泛型?

  20. 20

    如何在Java方法中使用泛型

  21. 21

    如何在方法声明中使用泛型

  22. 22

    如何在列表派生类中使用列表理解

  23. 23

    如何在派生类和方法调用中使用mypy?

  24. 24

    将派生类型的泛型转换为父类型的泛型

  25. 25

    在派生类型中使用异步属性

  26. 26

    如何在HashMap中使用泛型?

  27. 27

    如何在Scala中使用泛型

  28. 28

    如何在Scala中使用泛型

  29. 29

    如何从虚拟函数返回泛型派生类?

热门标签

归档