Site logo
Site logo
Programmieren aus Leidenschaft
Programmieren aus Leidenschaft

Schreibgeschützte Variablen


Wie wir im Kapitel über Felder und Eigenschaften gelernt haben, ist es durchaus sinnvoll Klassenvariablen - auch als Felder bekannt - vor unrechtmäßigem Zugriff zu schützen. Ein weiterer Mechanismus dazu ist das Schlüsselwort "readonly", das so angewendet wird:

readonly public string nachricht = "Hallo Welt";

"Nagut", mag der erfahrene Programmierer sagen, "aber das kann ich mit ‚const' doch schon lange.Stimmt, aber es gibt weitere Wege den Inhalt dieses readonly-Feldes zu beschreiben. Das Geheimnis liegt im Konstruktor. Erstellen wir uns eine einfache, kleine Klasse.

class TestKlasse
{
   readonly public string nachricht;
   public TestKlasse(string nachricht)
   {
      this.nachricht = nachricht;
   }
}


Von dieser Klasse ein Objekt zu erzeugen und die Nachricht auszugeben, sähe dann so aus:

TestKlasse meinTest = new TestKlasse("Guten Morgen");
MessageBox.Show(meinTest.nachricht);


Es ist also durchaus möglich, den zu speichernden Wert variable zu halten. Wird das Objekt erzeugt, so kann auch das readonly-Feld vom Konstruktor beschrieben werden. Danach ist der Wert allerdings unveränderlich und kann nur noch gelesen werden. Diese Verfahren eignet sich optimal für Klassen, die eine eindeutige Identifizierung benötigen, wie das nächste Beispiel zeigt:

class PersonenKlasse
{
   readonly public string PersonenID;
   public string Name;
   public string Vorname;
   public string Ort;

   public PersonenKlasse(string personenID)
   {
      this.PersonenID = PersonenID;
   }
}


Bei dieser PersonenKlasse sind Name, Vorname und Ort beliebig änderbar. Man sollte sich solche Möglichkeiten immer offen halten, auch um eventuelle Rechtschreibfehler bei der Eingabe zu korrigieren. Die PersonenID hingegen wird bei Erstellung eines Objekts festgelegt und kann im Nachhinein nicht verändert werden. Das ist besonders wichtig, wenn die Daten in Beziehung zu anderen Daten stehen. Zu guter Letzt sehen wir uns noch an, wie ein Objekt dieser Klasse erstellt wird.

PersonenKlasse meinePerson = new PersonenKlasse("MM0001");
meinePerson.Name = "Meier";
meinePerson.Vorname = "Max";
meinePerson.Ort = "München";


Natürlich kann man die zusätzlichen Werte auch durch einen Konstruktor übergeben, wenn man das möchte. Wie so oft beim Programmieren gibt es mehr als eine Lösung und es ist persönlicher Stil, für welchen Weg man sich entscheidet.