Einzelnen Beitrag anzeigen

normancz

Registriert seit: 28. Mär 2008
6 Beiträge
 
Delphi 2010 Professional
 
#1

Interface-Vererbung einer privaten Klasse

  Alt 30. Jan 2012, 14:48
Delphi-Version: 2007
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

Geändert von normancz (30. Jan 2012 um 15:10 Uhr)
  Mit Zitat antworten Zitat