Hallo,
ich bin auf eine "blöde"
Frage gestossen:
Angenommen ich habe eine Komponente mit folgenden Eingenschaften:
Delphi-Quellcode:
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;
Nun steht im Handbuch (Seite 33-5 Delphi 5 deutsch) über die Eigenschaftsdaten,
- dass die zum Speichern verwendeten Felder als private deklariert sein müssen.
- dass aussschließlich die Implementierungsmethoden (Get_xxx und Set_xxx) auf diese Daten direkt zugreifen dürfen.
- dass wenn andere komponenteneigene Methoden/Eigenschaften auf Eigenschaftsdaten zugreifen wollen, dies ausschliesslich über die Eigenschaften und nicht direkt auf die Daten machen dürfen.
Mit anderen Worten:
Delphi-Quellcode:
{******************************************************************************}
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;
Es funktioniert offensichtlich beides, ausser wenn die Implementierung einer geerbten Eigenschaft geändert wird (lt. Handbuch).
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"