In der Funktion weißt du, dass "dieses" Interface die geünschte Funktion implementiert definiert und kannst sie demnach dort aufrufen.
Das funktioniert nur dann, wenn jedes Mal das gleiche Interface übergeben wird und intern immer dieselbe Funktion davon aufgerufen wird. Im diesem Fall hier klappt das nicht:
Delphi-Quellcode:
Ergebnis1 := Rechenfunktion( EinString, EinInterfaceObjekt.DieFunktion);
Ergebnis2 := Rechenfunktion( EinString, EinInterfaceObjekt.DieAndereFunktion);
Das Problem bei diesem Ansatz ist, dass Interface-Methoden anders implementiert sind als die in Klassen. Ein hässlicher Workaround wäre sowas:
Delphi-Quellcode:
type
TMeineFunktion = reference to function( const Param: TJSONObject): TJSONObject;// of object;
...
function Rechenfunktion( const EinString: string; AFunc: TMeineFunktion): string;
...
Ergebnis := Rechenfunktion( 'EinString',
function( const Param: TJSONObject): TJSONObject
begin
result := EinInterfaceObjekt.DieFunktion(Param);
end
);
Wäre IMeinInterface eine Klasse, würde es so funktionieren:
Ergebnis := Rechenfunktion( 'EinString', EinInterfaceObjekt.DieFunktion);