Object Properties

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Traude
Beiträge: 29
Registriert: Mo 18. Aug 2008, 11:59
OS, Lazarus, FPC: Ubuntu 8.04 + XP SP2 DualBoot, Lazarus 0.9.28, FPC 2.2.4
CPU-Target: 32Bit
Wohnort: Wien

Object Properties

Beitrag von Traude »

Wenn ich in einer Klasse ein Objekt (also die Instanz einer anderen Klasse) als Read-Only-Property definiere, kann der Benutzer dieses Property-Objekt freigeben, was mir nicht recht ist.

Es ändert auch nichts daran, wenn die Klassendefinition des Property-Objects in einer anderen Unit steht.

Irgendwie ist das auch logisch, denn mit dem Object-Property übergibt man ja einen Zeiger auf die Instanz.

Mir fällt dazu eigentlich nur ein, die jeweiligen Methoden/Felder der Sub-Objekte als "Public" zu deklariern und im Hauptobjekt aufzurufen, was ich aber gern vermeiden würde.

Vielen Dank im Voraus für jede Antwort
Traude

Benutzeravatar
theo
Beiträge: 10893
Registriert: Mo 11. Sep 2006, 19:01

Re: Object Properties

Beitrag von theo »

Traude hat geschrieben:Wenn ich in einer Klasse ein Objekt (also die Instanz einer anderen Klasse) als Read-Only-Property definiere, kann der Benutzer dieses Property-Objekt freigeben, was mir nicht recht ist.
Ist doch nicht dein Problem. Das kann der Benutzer auch machen:

Memo1.Lines.Free;

Kackt ab, na und?

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Object Properties

Beitrag von Socke »

Traude hat geschrieben:Wenn ich in einer Klasse ein Objekt (also die Instanz einer anderen Klasse) als Read-Only-Property definiere, kann der Benutzer dieses Property-Objekt freigeben, was mir nicht recht ist.
Das kannst du nicht verhindern, da schon TObject.Destroy öffentlich sichtbar (public) ist. Es ist aber durchaus gängige Praxis, die Klassendefinition so zu gestalten, dass diese Objekte nicht freigegeben werden dürfen (oder der Verursacher hat die Konsequenzen zu tragen). In der LCL wird dies auch überall so gemacht (Zeilen einer Listbox, Inhalt eines StringGrids, Schriftarten etc.)
Traude hat geschrieben:Mir fällt dazu eigentlich nur ein, die jeweiligen Methoden/Felder der Sub-Objekte als "Public" zu deklariern und im Hauptobjekt aufzurufen, was ich aber gern vermeiden würde.
Das ist -- didaktisch gesehen -- der "richtige" Weg ("Kapselung").
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Traude
Beiträge: 29
Registriert: Mo 18. Aug 2008, 11:59
OS, Lazarus, FPC: Ubuntu 8.04 + XP SP2 DualBoot, Lazarus 0.9.28, FPC 2.2.4
CPU-Target: 32Bit
Wohnort: Wien

Re: Object Properties

Beitrag von Traude »

Dann muss ich mir was anderes überlegen, danke jedenfalls für die Antwort.

Antworten