delphi - Delphi 泛型类可以从其类参数派生吗?

标签 delphi generics delphi-2010 delphi-xe crtp

我一直在尝试定义一个通用的、可继承的 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 中完成这项工作吗?有一些根本原因导致这行不通吗?

最佳答案

根据设计,您无法创建从其类型参数之一派生的泛型类。

关于delphi - Delphi 泛型类可以从其类参数派生吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3991788/

相关文章:

delphi - Delphi 2010 Generics of Generics

delphi - FireMonkey 并显示所有者表单的模式对话框中心

Windows GDI 中的 Delphi TextRect

generics - 为 int 寻找特征 core::cmp::PartialEq 的实现

java - 泛型上的通配符错误

java - 实例化类型参数的对象

delphi - 如何从 Delphi 迁移到 Delphi 2010(Unicode 问题)

delphi - 如何防止在组件 TColorBox 中选择特定颜色?

delphi - 如何在 Delphi for Windows 8 中启动 Windows 服务

delphi - 如何防止平板电脑屏幕自动旋转?