Hallo,
ich habe hier eine private Klasse, welche nur per Interface erreichbar sein soll um sie später per Factory/DI einfach auszutauschen:
Delphi-Quellcode:
unit UnitA;
interface
type
IFoo =
interface(IInterface)
['
{90CA22A8-ACC3-4EF8-8E41-3C1B7EF755E3}']
procedure Foo;
stdcall;
end;
function GetFooFromFactoryWithDI: IFoo;
implementation
type
TFoo =
class(TInterfacedObject, IFoo)
protected
procedure Foo;
stdcall;
end;
...
Nun möchte ich diese Klasse in einer anderen
Unit noch erweitern. Dies klappt allerdings nicht so, wie ich es mir vorstelle:
Delphi-Quellcode:
unit UnitB;
interface
uses
UnitA;
type
IBar =
interface(IFoo)
['
{ABCDF8A2-646E-48A7-8B80-DAAE3244281B}']
procedure Bar;
stdcall;
end;
function GetBarFromFactoryWithDI: IBar;
implementation
type
TBar =
class(TInterfacedObject, IBar)
private
fMasterFoo: IFoo;
protected
procedure Bar;
stdcall;
public
property MasterFoo: IFoo
read fMasterFoo
implements IFoo;
end;
...
Ich dachte eigentlich, dass ich per implements das Foo-Interface einfach einbinden kann, aber Delphi will es dann auch in der Klassendefinition angegeben haben. Nur danach wird Foo aus IBar vermisst.
Was habe ich da übersehen, oder ist so eine Vererbung nicht möglich?
Edit:
Jetzt bin ich einen Schritt weiter gekommen, welcher zumindest compiliert aber noch nicht außerhalb des Beispielprojekts getestet wurde:
Delphi-Quellcode:
TNewFoo = class(TInterfacedObject, IFoo)
private
fMasterFoo: IFoo;
public
property MasterFoo: IFoo read fMasterFoo implements IFoo;
end;
TBar = class(TNewFoo, IBar)
protected
procedure Bar; stdcall;
end;
Gibt es eine elegantere Lösung ohne die zweit-Klasse?
Bye,
Norman