为什么这不起作用?我得到一个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;
答案 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