Einzelnen Beitrag anzeigen

Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#1

Komponenten-Entwicklung: Interner Zugriff auf Eigenschaften

  Alt 18. Jan 2004, 18:56
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"
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat