小编den*_*nis的帖子

继承泛型参数在Delphi XE中不起作用

我一直试图通过覆盖在该基类中定义的虚方法来扩展从同一基类继承的一堆库类.修改总是相同的,所以我决定创建一个由库类类参数化的泛型类,而不是创建库类的N​​个后继类,它继承自参数指定的类,并覆盖基类的方法.问题是下面的代码没有编译,编译器不允许从T继承:

program Project1;

type
  LibraryBaseClass = class
    procedure foo; virtual;
  end;

  LibraryClassA = class(LibraryBaseClass)
  end;

  LibraryClassB = class(LibraryBaseClass)
  end;

  LibraryClassC = class(LibraryBaseClass)
  end;

  LibraryClassD = class(LibraryBaseClass)
  end;

  MyClass<T:LibraryBaseClass> = class(T) //Project1.dpr(20) Error: E2021 Class type required
    procedure foo; override;
  end;

procedure LibraryBaseClass.foo; 
begin
end;

procedure MyClass<T>.foo; 
begin
end;

begin
  MyClass<LibraryClassA>.Create.foo;
  MyClass<LibraryClassB>.Create.foo;
  MyClass<LibraryClassC>.Create.foo;
  MyClass<LibraryClassD>.Create.foo;
end.
Run Code Online (Sandbox Code Playgroud)

任何想法如何使这项工作?也许有一种方法可以欺骗编译器接受等价的东西,例如,从Dictionary<T,T>编译继承而没有问题.

或者,如果你和我有同样的目标,你会怎么做?请记住,在实际情况中,我需要覆盖多个方法并添加一些数据成员.

谢谢

delphi generics inheritance delphi-xe

4
推荐指数
1
解决办法
1084
查看次数

标签 统计

delphi ×1

delphi-xe ×1

generics ×1

inheritance ×1