Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: privaten Record über Getter heraus geben

  Alt 29. Jul 2016, 15:01
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)
  Mit Zitat antworten Zitat