我一直试图通过覆盖在该基类中定义的虚方法来扩展从同一基类继承的一堆库类.修改总是相同的,所以我决定创建一个由库类类参数化的泛型类,而不是创建库类的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>编译继承而没有问题.
或者,如果你和我有同样的目标,你会怎么做?请记住,在实际情况中,我需要覆盖多个方法并添加一些数据成员.
谢谢