Im Endeffekt geht es dir doch um
Kovarianz für Rückgabewerte, oder? Interfaces an sich haben damit eigentlich gar nichts zu tun. Du willst dass ein Methodenzeiger auf eine "Formenfabrik"-Methode auf eine "Kreisfabrik"-Methode oder eine "Trapezfabrik"-Methode beinhalten kann.
Vereinfachtes Beispiel:
Delphi-Quellcode:
program Project19;
uses System.SysUtils;
type
TBase = class(TObject);
TSub = class(TBase);
function createBase(): TBase;
begin
Result := TBase.Create();
end;
function createSub(): TSub;
begin
Result := TSub.Create();
end;
var
baseFactory: TFunc<TBase>;
subFactory: TFunc<TSub>;
begin
baseFactory := createBase;
//baseFactory := createSub; // E2010, kann Delphi nicht
subFactory := createSub;
//subFactory := createBase; // E2010, war zu erwarten
end.
Das geht in Delphi nicht, Delphi kann keine Kovarianz für Rückgabetypen. Ebenfalls leider nicht für z.B. Var-parameter.
Der erste
QC-Eintrag sogar schon aus 2005
http://qc.embarcadero.com/wc/qcmain.aspx?d=16089
Sprachen wie Java z.B. können es:
https://blogs.oracle.com/sundararaja..._types_in_java