Einzelnen Beitrag anzeigen

Sequitar

Registriert seit: 8. Jan 2016
74 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: In Klasse auf Funktion zugreifen oder auf Property?

  Alt 30. Mär 2018, 00:53
Zur allgemeinen Frage:
Properties eignen sich zum kontrollierten Zugriff auf die Daten deiner objekte. Sie können lesend, schreibend oder beides sein. Demnach kannst du bestimmen wie auf deine Daten zugegriffen werden darf, anstatt jeden Nutzer direkt mit deinen Variablen in Kontakt treten zu lassen, was mglw. ungewollte Folgen haben kann.
Ausserdem kannst du relativ einfach bei vererbten klassen die zugriffs- und sichtbarkeitsrechte ändern.

Delphi-Quellcode:
Type
  TX = Class
  Private
    Fvalue: Integer; // feld zum speichern der daten
    Function Getvalue: Integer; // zugriffsfunktion
  Protected // nur für Erben sichtbar
    Property Avalue: Integer Read Getvalue;
    // Zugriffsbeschränkung auf nur lesend
  Public
    Constructor Create;
  End;

 TX2 = Class(TX)
  Private
    Procedure Setvalue(Value: Integer);
  Public
    Property Avalue Write Setvalue;
    // Sichtbarkeit geändert, jetzt 'überall' sichtbar; ausserdem darf der wert geändert werden
  End;

Damit ist jetzt nur noch Folgendes möglich:

Delphi-Quellcode:
 { TX }

Constructor TX.Create;
  Begin
    Fvalue := 42;
  End;

Function TX.Getvalue: Integer;
  Begin
    Result := Fvalue;
  End;
{ TX2 }

Procedure TX2.Setvalue(Value: Integer);
  Begin
    Fvalue := Value;
  End;

Procedure Main;
  Var
    X: Tx;
    Y: Tx2;
  Begin
    X := Tx.Create;
    // X.Avalue := 42; //Cannot assign to a read only propery
    Writeln(X.Avalue); // writes 42
    X.Free;
    Y := Tx2.Create;
    Y.Avalue := 55;
    Writeln(Y.Avalue); // writes 55
    Y.Free;
  End;
  Mit Zitat antworten Zitat