我一直在尝试通过覆盖该基类中定义的虚拟方法来扩展一堆从同一基类继承的库类。修改总是相同的,所以我决定创建一个由库类类型参数化的泛型类,而不是创建库类的 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.
任何想法如何使这项工作?也许有一种方法可以诱使编译器接受等价的东西,例如,从Dictionary<T,T>
编译器继承而不会出现问题。
或者如果你和我有同样的目标你会怎么做?请记住,在实际情况中,我需要覆盖多个方法并添加一些数据成员。
谢谢