【问题标题】:delphi generics with constructor constraint带有构造函数约束的delphi泛型
【发布时间】:2015-07-16 14:54:50
【问题描述】:

我尝试编译这段代码:

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

【问题讨论】:

    标签: generics delphi-xe7


    【解决方案1】:
    TConcretClass = class(TMyClass<TConcretClass>)
    

    我不认为你的意思是你要声明的类是一个包含类型为自身的成员的列表。在任何情况下,编译器都会反对,因为TObjectList&lt;T&gt; 有一个带有无法隐藏参数的构造函数。编译器说:

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

    TObjectList&lt;T&gt; 无法满足该要求。

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

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

    【讨论】:

    • 好的。正如您所问的,我已经解释了为什么编译器会报告该错误。你明白为什么会这样吗?
    • 好吧,为什么不编译这段代码:TNode = class public constructor Create;结尾; TConcretNode = class(TNode) 公共构造函数创建;结尾; TConcretNode 只有一个名为 Create 的公共无参数构造函数
    • 在那种情况下TConcretNode的定义不完整,编译器不知道TConcretNode具有必要的品质。
    • 您提出的问题需要更多帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    相关资源
    最近更新 更多