Zitat von
mkinzler:
Dann würde ich die (zusätzliche) Funktionalität von TProgramm aufsplitten, die Vereinbarungen als Interface und die Implemnetierung in eine Helperklasse.
Delphi-Quellcode:
TMyForm = class (Tform, IProgramm);
MyForm.helper: TProgrammHelper;
TMyFrame = class( TFrame, IProgramm);
MyFrame.helper: TProgrammHelper;
Jo, genau so.
Und dank interface delegation kann man das ganze schön an eine Default-Implementierung des interfaces weitereichen:
Delphi-Quellcode:
IProgram = interface
['{1B2FFB63-F505-4D2C-94F5-B7043B9894F8}']
procedure DoSomething;
end;
TProgram = class(TInterfacedObject, IProgram)
procedure DoSomething;
end;
Delphi-Quellcode:
. TForm1 = class(TForm, IProgram)
private
fProgram : IProgram;
protected
property ProgramAggregate : IProgram read fProgram implements IProgram;
public
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
end;
...
procedure TForm1.AfterConstruction;
begin
inherited;
fProgram := TProgram.Create(Self);
end;
procedure TForm1.BeforeDestruction;
begin
fProgram := nil;
inherited;
end;
Jetzt kann das Form auch als IProgram benutzt werden, alles was IProgram kann und was von TProgram implementiert wird, funktioniert auch mit deinem Form. Selbst wenn interface und TProgram später erweitert werden.
Auf die Art hast du fast schon Mehrfachvererbung.