Einzelnen Beitrag anzeigen

Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Zuweisung eines Methodenzeigers bei vererbten Interfaces

  Alt 21. Apr 2017, 14:21
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
  Mit Zitat antworten Zitat