具有构造函数约束的delphi泛型

时间:2015-07-16 14:54:51

标签: generics delphi-xe7

我尝试编译这段代码:

TMyClass<T: class, constructor> = class(TObjectList<T>)
public
  constructor Create; reintroduce;
end;
TConcretClass = class(TMyClass<TConcretClass>)
public
  constructor Create; reintroduce;
end;

但我得到了下一个错误:

E2513 Type parameter 'T' must have one public parameterless constructor named Create

1 个答案:

答案 0 :(得分:1)

TConcretClass = class(TMyClass<TConcretClass>)

我不认为你的意思是你宣布成为一个包含类型本身的成员的列表。在任何情况下,编译器都是对象的,因为TObjectList<T>有一个构造函数,其参数不能被隐藏。编译器说:

  

E2513类型参数&#39; T&#39;必须有一个名为Create

的公共无参数构造函数

并且TObjectList<T>无法满足该要求。

我怀疑你想要更像这样的东西:

type
  TMyClass<T: class, constructor> = class(TObjectList<T>)
  end;

  TListMemberClass = class(TObject)
  end;

  TConcreteClass = class(TMyClass<TListMemberClass>)
  end;
相关问题