Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Record-Array als Property einer Klasse: einfacher Zugriff auf die Record-Felder

  Alt 7. Aug 2019, 10:55
Die Umstellung auf einen Referenztyp ist für dieses Problem oft die einfachste und schnellste Lösung, aber nicht unbedingt die Beste.
Delphi-Quellcode:
type
  TStrArray = array of string;

  PJobData = ^TJobData;
  TJobData = record
    Name: string;
    uid: integer;
    sources: TStrArray;
    procedure Assign(const AItem: TJobData);
  end;

  TJobList = class(TObject)
  private
    fJobs: array of TJobData;
    procedure SetJob(jobIndex: integer; job: PJobData);
    function GetJob(jobIndex: integer): PJobData;
  public
    property Jobs[jobIndex: integer]: PJobData read GetJob write SetJob;
  end;

implementation

procedure TJobData.Assign(const AItem: TJobData);
begin
  Name := AItem.Name;
  uid := AItem.uid;
  // damit sources und AItem.sources nicht auf das selbe Array verweisen
  // und nachfolgende Änderungen von AItem.sources keine Auswirkungen auf sources haben
  sources := Copy(AItem.sources);
end;

procedure TJobList.SetJob(jobIndex: integer; job: PJobData);
begin
  {...}
// fJobs[i] := job^;
  fJobs[i].Assign(job^);
end;
    
function TJobList.GetJob(jobIndex: integer): PJobData;
begin
  {...}
  Result := @(fJobs[i]);
end;


joblist.Jobs[1]^.Name := joblist.Jobs[1]^.Name + ' TEST';
  Mit Zitat antworten Zitat