![]() |
Komponenten-Entwicklung: Interner Zugriff auf Eigenschaften
Hallo,
ich bin auf eine "blöde" :oops: Frage gestossen: Angenommen ich habe eine Komponente mit folgenden Eingenschaften:
Delphi-Quellcode:
Nun steht im Handbuch (Seite 33-5 Delphi 5 deutsch) über die Eigenschaftsdaten,
TFileBuffer = CLASS(TStringList)
PRIVATE ... FItemSeperator: Char; FUNCTION GetObjectFileTime(Index: Integer): TDateTime; ... PUBLIC ... PROPERTY ObjectFileTime[Index: Integer]: TDateTime READ GetObjectFileTime WRITE SetObjectFileTime; PROPERTY ItemSeperator: Char READ FItemSeperator WRITE FItemSeperator; CONSTRUCTOR Create; DESTRUCTOR Destroy; OVERRIDE; END;
Mit anderen Worten:
Delphi-Quellcode:
Es funktioniert offensichtlich beides, ausser wenn die Implementierung einer geerbten Eigenschaft geändert wird (lt. Handbuch).
{******************************************************************************}
FUNCTION TFileBuffer.GetObjectFileTime(Index: Integer): TDateTime; {******************************************************************************} // Nicht lauffähige DEMO-Methode!! VAR aValue : Char; BEGIN ... // Wenn ich nun auf die Eigenschaft "ItemSeperator" zugreifen möchte // müsste ich ja auf aValue := ItemSeperator; // ZUGRIFF ÜBER DIE EIGENSCHAFT // und nicht auf aValue := FItemSeperator; // DIREKTER ZUGRIFF // zugreifen? END; Ich habe mir "renomierte" Projekte angesehen, und musste feststellen, jeder macht es anders (direkt, über die Eigenschaft oder gemischt), oder habe ich den tieferen Sinn nicht verstanden? Meine Frage ist nun, ist das bloß eine Designfrage/Schwäche/Stilfrage, oder wie geht es nun "richtig" |
Re: Komponenten-Entwicklung: Interner Zugriff auf Eigenschaf
schon des Designs wegen sollte man Variablen niemals public deklarieren.
|
Re: Komponenten-Entwicklung: Interner Zugriff auf Eigenschaf
Hallo Sanches :shock: ,
meine Frage ist eigentlich, wie ich korrekt bei einer Komponente in einer Methode auf die Daten von (anderen) Eigenschaften zugreifen soll... |
Re: Komponenten-Entwicklung: Interner Zugriff auf Eigenschaf
Ich glaube, dass ist blos ein Frage des schönen Stils.
Aber warum sollte man auch indirekt zugreifen, wenns auch direkt geht ! |
Re: Komponenten-Entwicklung: Interner Zugriff auf Eigenschaf
Zitat:
Eine Methode einer Klasse kann doch ohne weiteres auf die Member-Variablen zugreifen. Wenn du in der Getter- bzw Setter-funktion irgendwelche Vorgänge drinnen hast, die du auch von der anderen Funktion aus benötigst, dann gehst du den Weg über die Property, ansonsten eben nicht. |
Re: Komponenten-Entwicklung: Interner Zugriff auf Eigenschaf
Zitat:
Zitat:
Ein hypothetische Frage Was aber, wenn die property zum Lesen auch nur auf die Konstante zurückgreift. Da würde ich gegenhalten, daß sich dieses mal ändern kann und man dann überall die Variable durch die Property auswechseln müsste. Zum Punkt: Objektvariablen als private Das ist lediglich eine Frage des sauberen Designs. Dadurch kann man sich selbst versichern, daß ein anderer Programmierer den Inhalt einer solchen Variable nicht direkt auf "legalem" Wege ändern kann, d.h. man kann durch die SetXXX Methoden immer die Oberhand wahren ;-) Persönlich empfehle ich den direkten Zugriff auf die Variablen nur an drei Stellen: der GetXXX Methode, der SetXXX Mathode und die Methode (oft Create) welche zur Initialisieren (oder auch zum Reset) der Klasse/des Objektes genutzt wird. ...:cat:... |
Re: Komponenten-Entwicklung: Interner Zugriff auf Eigenschaf
@sakura
achso du meinst z.B. dies:
Delphi-Quellcode:
und in SetMyVar machst du dann Plausibilitätstests?
property MyVar: String read FMyVar write SetMyVar;
|
Re: Komponenten-Entwicklung: Interner Zugriff auf Eigenschaf
Zitat:
Würde ich jetzt direkt auf die Variable zugreifen, könnte ich den Plausibilitätstest nicht mehr so einfach durchführen. ...:cat:... |
Re: Komponenten-Entwicklung: Interner Zugriff auf Eigenschaf
Hallo Sakura,
vielen Dank für Deine Erklärungen, das war genau das wonach ich suchte! :hello: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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