Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi property...read..write (https://www.delphipraxis.net/3064-property-read-write.html)

sakura 21. Feb 2003 08:01

Delphi-Quellcode:
auto.alter := 10;
ist schon richtig. Intern ruft Delphi dann die Methode schreibAlter auf und übergibt den Wert 10 im AX Register des Prozessors.

Nach aussen sieht das Ganze wie eine Variable aus und intern kann Dein Objekt/Deine Klasse angemessen darauf reagieren.

...:cat:...

P.S.: In Delphi ist es üblich anstatt von liesAlter und schreibAlter die Namen GetAlter und SetAlter zu nutzen, sowie auch den ersten Buchstaben des Namens groß zu schreiben (die Kleinschreibung ist z.B. in Java üblich).

R.Meyrat 21. Feb 2003 08:37

Hallo Zusammen

Das beispiel kommt mir sehr bekannt vor "Kochbuch Borland Delphi 5" von Walter Dobrez und Thomas Kowalski Rezept 262.

da haben die den constructor "Erzeugen(..)" genannt un den destructor " Entfernen"...


roger

Haegar 21. Feb 2003 09:54

ja da beispiel, is aus dem buch "Delphi 6 grundlagen und Profiwissen".
da haben sie das beispiel schrittweise ein wenig optimiert, so das dann die destructor-prozedur wegfiel! is aber ansonsten ganz gut, und kapiert hab ichs nu auch.

danke leutz
ciao haegar

oki 21. Feb 2003 10:19

Noch mal kurz zum Sinn des Beispiels.
Dem Autor geht es sicher darum die Möglichkeiten der Verwendung von Propertys zu zeigen.

Propertys werden in der Regel immer im Privatteil deklariert, damit nicht jemand ohne tiefere Kenntnis des Objektes etwas tun was er nicht soll.

Ist ein Property (Eigenschaft) eines Objektes nur für den Lesezugriff bestimmt, so kann man das am Besten im Public-Teil über die Deklaration Read definieren.

Was müßte man nicht alles tun um das Schreiben von außen zu verhindern. Ein imenser Aufwand. Es muß auch keiner in der Doku nachlesen ob er auf die Eigenschaft schreiben darf (wer liest schon Dokus?). Es wird einfach verhindert.

Somit ist schon mal klar, dass die Deklaration von Variablen in Objekten generell im private-Teil erfolgen sollte und die Art des Zugriffes im Public-Teil mit read und write bestimmt wird.

Warum nun Proceduren und F
unktionen?

Sicher kann mann auch folgendes machen:

Delphi-Quellcode:
interface
type TAuto=class(TObject)
  private
   bj:integer;              
  public
   constructor erzeugen(xpos,ypos:integer; color:longint, baujahr:integer);
   property Alter:integer read bj write bj;
end;

oki 21. Feb 2003 10:31

Irgentwie hat mein Browser gesponnen und ich muß neu weitermachen!

Die von mir gezeigte Form macht in Bezug auf die Variable bj das gleiche wie das Urbeispiel mit einem feinen Unterschied. Was ist, wenn in meinem Objekt bei der Veränderung einer Variablen noch weitere Aktionen ausgeführt werden müssen? Genau dann ist es prima mittels read oder Write Proceduren und Funktionen nutzen zu können. Man übergibt den Parameter und tun dann auch alles nötige in einem Abwasch. Und das schöne, von außen sieht alles gleich aus.

sowohl bei Deinem wie bei meinem Beispiel wird der Wert in Deiner Form1 mit
Delphi-Quellcode:
Auto.Alter := 10;
geändert. Mit der Procedure kann dann aber automatisch noch mehr getan werden.

kleines Bsp.

Du möchtest einen Klartext ändern. Zum Bsp. wie folgt:

Delphi-Quellcode:
procedure SetAlter(Alter : Integer);
begin
bj := Alter;
If bj < 2 then FAlterText := 'neu';
IF (bj > 1) and (bj < 5) then FAlterText := 'noch nicht Schrott';
.
.
.
und so weiter. (die Art der Umsetzung ist jetzt egal, es geht ums Prinzip)

FAlterText währe in deinem Objekt TAuto genauso ein Property auf das man dann vielleicht nur lesend zugreift.

o.k. das wars von mir,

Gruß oki

R.Meyrat 21. Feb 2003 10:31

Bei der Verwendung von Funktionen und Proceduren können die Werte zusätzlich geprüft werden (Eingabe), damit zum Beispiel nur Werte zwischen 1900 und 2099 als Baujahr gültig sind.
Bei der Ausgabe könnte man den Wert zum Beispiel umwandeln in einen andern Typ.

Beispiel:
Geschwindigkeit wird intern als Integer gebraucht aber für die Ausgabe würde String reichen (nicht gerade ein gutes Beispiel :wink: ich weiss). aber Zweck ist deutlich.


gruss roger
:coder:

@OKI binwohl zwischen deinen Postings gelandet, du hast ja das gleiche erklärt wie ich :D

Haegar 21. Feb 2003 11:15

danke, hat mir echt weitergeholfen, bin mal wieder ein stück schlauer! :hello:

dann werd ich mich mal ransetzen und probieren
ciao haegar


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:49 Uhr.
Seite 2 von 2     12   

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