Einzelnen Beitrag anzeigen

Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#1

Property -> Getter und Setter mit Parametern

  Alt 28. Jan 2015, 08:59
Ein Gedankengang zum Thema "wie spare ich Tipperei".

Ich habe ein CustomObject, welches Parameter speichert. Egal wo und wie. Und es gibt eine Ableitung in der ich einige Properties definiere, welche Properties des Parent verwendet. Der Zugriff wird in der Implementation geregelt.

Delphi-Quellcode:
interface

type
  TCustomSpeicherobjekt = class(TObject)
    private
      function GetEinStringWert(aIndex: string): string;
      procedure SetEinStringWert(aIndex: string; const Value: string);
    public
      property EinStringWert[aIndex:string]:string read GetEinStringWert write SetEinStringWert;
    end;


  TMeinSpeicherobjekt = class(TCustomSpeicherobjekt)
    private
      function GetWertA: string;
      function GetWertB: string;
      procedure SetWertA(const Value: string);
      procedure SetWertB(const Value: string);
    public
      property WertA:string read GetWertA write SetWertA;
      property WertB:string read GetWertB write SetWertB;
    end;


implementation

{ TMeinSpeicherobjekt }

function TCustomSpeicherobjekt.GetEinStringWert(aIndex: string): string;
begin
  // Hier steht Code zum Lesen
end;

procedure TCustomSpeicherobjekt.SetEinStringWert(aIndex: string; const Value: string);
begin
  // Hier steht Code zum Schreiben
end;


{ TMeinSpeicherobjekt }

function TMeinSpeicherobjekt.GetWertA: string;
begin
  Result:=EinStringWert['WertA'];
end;

function TMeinSpeicherobjekt.GetWertB: string;
begin
  Result:=EinStringWert['WertB'];
end;

procedure TMeinSpeicherobjekt.SetWertA(const Value: string);
begin
  EinStringWert['WertA']:=Value;
end;

procedure TMeinSpeicherobjekt.SetWertB(const Value: string);
begin
  EinStringWert['WertB']:=Value;
end;
Gibt es einge Möglichkeit den Code zu verkürzen. Ich denke an so etwas wie die direkte Funktionsübergabe mit Parameter. Dann könnte man sich die Implementation sparen.

Beispiel:

Delphi-Quellcode:
  TMeinSpeicherobjekt = class(TCustomSpeicherobjekt)
    private
    public
      // Entweder so
      property WertA:string read EinStringWert['WertA'] write EinStringWert['WertA'];
      // oder so
      property WertB:string read GetEinStringWert('WertB') write SetEinStringWert('WertB');
    end;
Oder gibt es andere Ansätze?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat