代码之家  ›  专栏  ›  技术社区  ›  Ken Bourassa

Delphi泛型类能否从其类参数中派生出来?

  •  4
  • Ken Bourassa  · 技术社区  · 14 年前

      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;
    

    目标是能够在继承树中“插入”singleton模式。所以不要像这样声明:

      TMySingletonComponent = class(TComponent)
    
      end;
    

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

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

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

    现在我在想,这在Delphi XE中能用吗?有什么“干净的黑客”可以让我在2010年的D2010工作吗?这是不是有一些根本性的原因不能起作用?

    3 回复  |  直到 14 年前
        1
  •  5
  •   Barry Kelly    14 年前

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

        2
  •  3
  •   Mason Wheeler    14 年前

    不,那不行。你试图用类本身来定义一个类。你放在参数里面的东西必须已经完全定义好了。

        3
  •  2
  •   A. Bouchez    14 年前

    你想得到什么?

    嗯,单身汉是邪恶的。他们之所以引入是因为C++的糟糕的OOP设计(对于在控制台应用程序中的输入/输出流的访问,就我所记得的)而言。而他们往往是地狱般的维持。

    你可以一直没有他们。它肯定不是一个“Delphi经典”的编程方法,因为Delphi不受我提到的C++问题的影响。

    一些Java项目(ab)使用singleton。搜索一下,你就会明白我的意思。