Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Auf Teil eines Records in eine Klasse zugreifen (https://www.delphipraxis.net/65079-auf-teil-eines-records-eine-klasse-zugreifen.html)

Grishnak 11. Mär 2006 23:59


Auf Teil eines Records in eine Klasse zugreifen
 
Gegeben sei folgende Definition:

Delphi-Quellcode:
type
  TMyRecord = record
    S: string;
    I: integer;
  end;

  TMyClass = class
  private
    FMyRecord: TMyRecord;
  public
    property MyRecord: TMyRecord read FMyRecord write FMyRecord;
  end;

[...]

var
  MyClass: TMyClass;

[...]

  MyClass:=TMyClass.Create;
  MyClass.MyRecord.S:='text'; // <--- FEHLER: 'Left side cannot be assigned to'
  MyClass.MyRecord.I:=5;     // <--- FEHLER: 'Left side cannot be assigned to'
Gibt es eine Möglichkeit, den Rekord so direkt anzusprechen, oder muss ich aus ihm ebenfalls eine Klasse machen?

marabu 12. Mär 2006 06:46

Re: Auf Teil eines Records in eine Klasse zugreifen
 
Guten Morgen, Grishnak.

Ja und Nein. Für den Typ einer property gelten die gleichen Einschränkungen wie für Rückgabewerte von Funktionen.

Delphi-Quellcode:
type
  PMyRecord = ^TMyRecord;
  TMyRecord = record
    S: string;
    I: integer;
  end;

  TMyClass = class
  private
    FMyRecord: PMyRecord;
  public
    constructor Create;
    destructor Destroy; override;
    property MyRecord: PMyRecord read FMyRecord write FMyRecord;
  end;

var
  MyClass: TMyClass;

constructor TMyClass.Create;
begin
  inherited Create;
  New(FMyRecord);
end;

destructor TMyClass.Destroy;
begin
  Dispose(FMyRecord);
  inherited;
end;

procedure TDemoForm.FormCreate(Sender: TObject);
begin
  MyClass := TMyClass.Create;
  MyClass.MyRecord.S := 'text';
  MyClass.MyRecord.I := 5;
  ShowMessage(MyClass.MyRecord.S);
  MyClass.Free;
end;
Wenn du deinen Record zu einer Klasse machst, dann treten lediglich Create und Free an die Stelle von New und Dispose.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz