Delphi函数通用

时间:2014-09-30 07:44:14

标签: function delphi generics

我想创建一个通用函数。我是通用的新手。 我有3个不同类型的私人名单。我想要一个公共泛型方法来返回列表中的1项。

我的代码如下。 (我简化了)

TFilter = class
private
   FListFilter            : TObjectList<TFilterEntity>;
   FListFilterDate        : TObjectList<TFilterDate>;
   FListFilterRensParam   : TObjectList<TFilterRensParam>;
public
   function yGetFilter<T>(iIndice : integer) : T; 
....
function TFilter .yGetFilter<T>(iIndice : integer) : T; 
begin
    if T = TFilterEntity then
       result := T(FListFilter.Items[iIndice])
    else
       ....
end;

我知道代码没有运行,但是你能告诉我它是否有可能做到这一点?

1 个答案:

答案 0 :(得分:3)

只需引入通用参数T的{​​{3}}即可。它必须是一个班级。

来自文档:

  

类型参数可以由零或一个类类型约束。与接口类型约束一样,此声明意味着编译器将要求作为约束类型参数的参数传递的任何具体类型与约束类兼容。   类类型的兼容性遵循OOP类型兼容性的常规规则 - 后代类型可以在需要其祖先类型的地方传递。

将声明更改为:

function yGetFilter<T:class>(iIndice : integer) : T;

更新

似乎在XE5及更早版本中出现编译错误:

  

E2015运算符不适用于此操作数类型

在这一行:

if T = TFilterEntity then

在XE6及以上版本中,此错误已得到修复。

顺便说一句,就像大卫在评论中说的那样:

if TClass(T) = TFilterEntity then