Generics 带构造函数约束的delphi泛型

Generics 带构造函数约束的delphi泛型,generics,delphi-xe7,Generics,Delphi Xe7,我尝试编译以下代码: TMyClass<T: class, constructor> = class(TObjectList<T>) public constructor Create; reintroduce; end; TConcretClass = class(TMyClass<TConcretClass>) public constructor Create; reintroduce; end; TConcretClass=class(TMy

我尝试编译以下代码:

TMyClass<T: class, constructor> = class(TObjectList<T>)
public
  constructor Create; reintroduce;
end;
TConcretClass = class(TMyClass<TConcretClass>)
public
  constructor Create; reintroduce;
end;
TConcretClass=class(TMyClass)
我不认为您的意思是,对于您声明的类,它是一个包含类型为自身的成员的列表。在任何情况下,编译器都会反对,因为
TObjectList
有一个带有无法隐藏的参数的构造函数。编者说:

E2513类型参数“T”必须有一个名为Create的公共无参数构造函数

TObjectList
无法满足该要求

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

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

  TListMemberClass = class(TObject)
  end;

  TConcreteClass = class(TMyClass<TListMemberClass>)
  end;
类型
TMyClass=类(TObjectList)
结束;
TListMemberClass=类(ToObject)
结束;
TConcreteClass=类(TMyClass)
结束;

OK。正如您所问,我已经解释了编译器报告该错误的原因。你明白它为什么这样做吗?好的,为什么不编译这个代码:TNode=class public constructor Create;结束;TConcretNode=类(TNode)公共构造函数创建;结束;TConcretNode只有一个名为Create的公共无参数构造函数在这种情况下,
TConcretNode
的定义不完整,编译器不知道
TConcretNode
具有必要的质量。对于您提出的问题,还需要其他帮助吗?
TConcretClass = class(TMyClass<TConcretClass>)
type
  TMyClass<T: class, constructor> = class(TObjectList<T>)
  end;

  TListMemberClass = class(TObject)
  end;

  TConcreteClass = class(TMyClass<TListMemberClass>)
  end;