我一直在尝试定义一个通用的,可继承的TSingleton类。这是我正在进行的:

  TSingleton<RealClass, InheritsFrom : class> = class(InheritsFrom)
  strict private
    class var FInstance : RealClass;
  protected
    procedure InstanceInitialization;virtual;
  public
    destructor Destroy; override;
    class procedure Create; reintroduce;
    class function Instance : RealClass;
    class procedure InstanceFree;
  end;


目的是能够将单例模式“插入”继承树。所以不要声明这样的东西:

  TMySingletonComponent = class(TComponent)

  end;


并且需要在此处实现单例模式,我将这样声明:

  TMyGenericSingletonComponent = class(TSingleton<TMyGenericSingletonComponent,TComponent>)
  end;


可悲的是,这行不通。我收到以下错误(在D2010中):

  TSingleton<RealClass, InheritsFrom : class> = class(InheritsFrom) ///E2021 Class type required


现在我在想,这是否可以在Delphi XE中工作?我可以使用一些“干净的技巧”来在D2010中完成这项工作吗?有一些根本原因导致此操作不起作用吗?

最佳答案

通过设计,您不能创建从其类型参数之一派生的泛型类。

09-10 16:19
查看更多