我一直在尝试通过覆盖定义在基类中的虚拟方法来扩展一堆继承自相同基类的库类。修改总是相同的,所以我决定创建一个通用类,参数为库类类型,该类继承自指定参数的类并覆盖基类的方法。
问题在于下面的代码无法编译,编译器不允许从 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.
有没有办法让这个工作起来?也许有一种方法可以欺骗编译器,使其接受等价的内容,例如继承自
Dictionary<T,T>
,就可以顺利编译通过。或者,如果你有和我一样的目标,你会怎么做呢?请记住,在实际情况中,我需要重写多个方法并添加一些数据成员。
谢谢。