Delphi接口泛型函数返回TobjectList <t> </t>

时间:2013-11-02 22:52:35

标签: delphi delphi-xe4

为什么这不起作用?我得到一个E2511类型参数'T'必须是类类型?

type
  IBaseProvider<T> = Interface
    function GetAll: TObjectList<T>;
  end;

type
  TCar = class(TInterfacedPersistent, IBaseProvider<TVehicle>)
    function GetAll: TObjectList<TVehicle>;
  end;

implementation

function TCar.GetAll: TObjectList<TVehicle>;
begin
  // do something with Objectlist
  Result := ObjectList
end;

1 个答案:

答案 0 :(得分:3)

TObjectList<T>的参数T被限制为一个类。

type
  TObjectList<T: class> = class(TList<T>)
    ....
  end;

您需要声明一个在您的类型上暗示这一点的约束。例如,您可以声明相同的约束:

type
  IBaseProvider<T: class> = Interface
    function GetAll: TObjectList<T>;
  end;

或者,只要符合TObjectList<T>约束,您就可以声明更强的约束。如果您不想限制参数,则需要使用TList<T>

如果您不熟悉通用约束,则文档应填补空白:http://docwiki.embarcadero.com/RADStudio/en/Constraints_in_Generics