Oder eine Kombination aus Interface, Instanz und Record:
Delphi-Quellcode:
IFoo = interface
function GetBar: Integer;
procedure SetBar( const Value: Integer );
property Bar : Integer read GetBar write SetBar;
end;
TFoo = record
private
FFoo: IFoo;
procedure EnsureInitialized();
function GetBar: Integer;
procedure SetBar( const Value: Integer );
public
property Bar: Integer read GetBar write SetBar;
end;
TFooImpl = class( TInterfacedObject, IFoo )
private { IFoo }
function GetBar: Integer;
procedure SetBar( const Value: Integer );
private
FBar: Integer;
end;
procedure TFoo.EnsureInitialized;
begin
if not Assigned( FFoo )
then
FFoo := TFooImpl.Create;
end;
function TFoo.GetBar: Integer;
begin
EnsureInitialized();
Result := FFoo.Bar;
end;
procedure TFoo.SetBar( const Value: Integer );
begin
EnsureInitialized();
FFoo.Bar := Value;
end;
function TFooImpl.GetBar: Integer;
begin
Result := FBar;
end;
procedure TFooImpl.SetBar( const Value: Integer );
begin
FBar := Value;
end;
Dem Record sollte man dann aber noch eine Clone Methode spendieren, damit man bei Bedarf auch einen unabhängigen Record bekommen kann
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)