AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Warum kann Record-Property nicht geschrieben werden?
Thema durchsuchen
Ansicht
Themen-Optionen

Warum kann Record-Property nicht geschrieben werden?

Ein Thema von Ares · begonnen am 4. Dez 2007 · letzter Beitrag vom 4. Dez 2007
 
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: Warum kann Record-Property nicht geschrieben werden?

  Alt 4. Dez 2007, 16:01
Zitat von sirius:
@Muetze: So richtig kann ich deine Erklärung nicht nachvollziehen.
Deshalb werde ich nie Tutorials schreiben: ich kann nicht erklären.

Zitat von sirius:
Folgendes funktioniert ja:
1. aus dem Record eine Klasse machen
Du bekommst die Instanz und dadurch wird nur der Instanz dieser Wert zugewiesen. Es wird aber kein Setter aufgerufen. Und genau das ist das Problem bei dem Record. Dein Beispiel braucht auch kein Setter, da du mit dem Getter die Instanz bekommst und darauf kann er frei schalten und walten - Delphi hat also einen direkten Ansprechpartner zum setzen der letzten Ebene (Data1).

Der Setter ist in deinem Beispiel sogar gefährlich: Im Normalfall legt sich TMyObject die Instanz von TMyData an und hält diese die Lebzeit lang. Von daher wäre es mehr als tödlich wenn jemand dir von aussen direkt eine andere Instanz oder Nil unterschiebt. Von daher sind solche Properties generell eigentlich nur-lesen Eigenschaften. Und bei Komponenten etc. wird explizit ein Setter definiert um darin mit z.B. Assign() die Werte der Instanz zu übernehmen - aber niemals die Instanz!

Zitat von sirius:
2. ein dynmaischer Record:
Wie ich oben schon geschrieben hatte: wenn es ein Pointer auf den Record ist, dann hat keiner ein Problem. Auch hier kann Delphi direkt die Werte setzen. Auch hier wird im Normalfall kein Setter gebraucht, es reicht eine r/o property.

Für beide gilt: in beiden Fällen bekommst Delphi einen Zeiger auf die Zieldaten und nicht direkt die Daten in die der Nutzer schreiben möchte. Von daher kann Delphi dies erledigen, da die temporäre Variable (result vom Getter) immer nur eine Adresse enthält, nicht aber die direkten Daten, wie es bei einem direkten Record (Ausgangsfall) ist.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz