私は、同じ基本クラスで定義された仮想メソッドをオーバーライドすることによって、同じ基本クラスから継承する一連のライブラリクラスを拡張しようとしています。変更は常に同じであるため、ライブラリクラスの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>
たとえば、問題なくコンパイルから継承するため、コンパイラをだまして同等のものを受け入れる方法があるかもしれません。
それとも、私と同じ目標を持っていたらどうしますか?実際の状況では、複数のメソッドをオーバーライドして、いくつかのデータメンバーを追加する必要があることに注意してください。
ありがとうございました