Membervariablen ReadOnly?

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Robert
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 36
Registriert: Mo, 13. Feb 2006 12:47

Membervariablen ReadOnly?

Beitrag von Robert »

Hallo,

folgendes Problem:

Ich möchte auf eine Membervariable außerhalb einer Klass nur lesend Zugreifen.

Code: Alles auswählen

CLASS ROnly

     EXPORTED:
     
        VAR cVar

        INLINE METHOD init()
            ::cVAR := "X "
         RETURN   

         INLINE ACCESS METHOD cVar
         RETURN cVar

ENDCLASS
Ich dachte mir, wenn ich nur nur Lesezugriff ermögliche, kann ich außerhalb der Klasse die Membervariable nicht ändern. Geht aber nicht.
Und da laut Handbuch ja ACCESS ASSIGN Methoden die selbe Sichtbarkeit wie die Attribute haben müssen bleibt nur beides Protected zu setzen, aber da hab ich auch mit einer ASSIGN Methode von außen keinen Zugriff...

Ich wollte mit den Weg sparen, extra Lesemethoda a la getVar zu schreiben. Kann man das nicht doch irgendwie mit ACCESS ASSIGN Methoden lösen?

Danke.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

wenn du eine solche Methode direkt an eine (gleichnamige) Variable bindest, hast du auch innerhalb der Klasse die Zugriffsgeschränkungen.
Das ist OK solange du in der Methode mit lokal oder static auskommst.

Wenn man aber innerhalb der Klasse anders zugreifen will, nimmt man eine zweite Variable (PROTECTED) und macht es so:

Code: Alles auswählen

class TT

  exported:
  access method Zeit

  protected:
  VAR _Zeit

endclass

method TT:Zeit()
  ::_Zeit := "Es ist nun "+dtoc(date())+" "+time()
return ::_Zeit

procedure main
   local oTT := TT():new()

   set date german

   ? oTT:Zeit
   ?
   ? "Bitte Taste drücken um unerlaubte Zuweisung zu provozieren ?"
   wait
   oTT:Zeit := "Fehler"
   ? oTT:Zeit
   wait

return
beachte bitte, dass ::_ZEIT hier nicht an die access Methode ::ZEIT gebunden ist. Die Access Methode Zeit speichert aber (und alle anderen Methoden können das ändern) in einer protected Var seine Infos ab (sinnvollere wären z.B. Zustandsmerker ...) um diese dann nach Aufruf auszugeben. Zuweisungen an ::ZEIT egal woher werden blockiert !
Gruß
Hubert
Antworten