C# – Automatische Eigenschaften – Schreibgeschützt

Ich habe bereits in einem früheren Beitrag über die Automatischen Eigenschaften als Spracherweiterung (oder Compilererweiterungen) in C# 3.0 bzw. Visual Studio 2008 berichtet.

Als ich mir das Konstrukt für die sogenannten „Auto-Implemented Properties“ näher betrachtet habe, war ich im ersten Moment ratlos wie die Implementierung einer Schreibgeschützten Eigenschaft funktionieren soll, bzw. wie diese Schreibgeschützten Eigenschaften jemals einen Wert zugewiesen bekommen können.

Aber wie gesagt, meine Ratlosigkeit beschränkte sich auf den ersten Moment smile_regular

Schauen wir uns das Thema doch in Beispielen an.

Beispiel Klasse:

class Customer
{
    public double TotalPurchases { get; set; }
    public string Name { get; private set; }       // Schreibgeschützt
    public int CustomerID { get; private set; }  // Schreibgeschützt
}

 

Der Compiler erzeugt bei diesem Konstrukt eine private aber anonyme variable, auf diese können wir, weil anonym ja nicht zugreifen.

Wie also kann man diese Schreibgeschützten Eigenschaften verwenden?

Da kam mit zuerst der Gedanke, da kommt natürlich eine weitere Neuerung die „Objekt Initialisierer“ zum Zuge.

So zum Beispiel:

Customer c = new Customer { CustomerID = 1, Name = „Max Mustermann“}

thumbs_down Aber nein, das geht nicht !

Wenn man dann aber etwas genauer hinsieht, dann liegt die Lösung eigentlich ganz offensichtlich schon in der Art der Definition der Schreibgeschützten Eigenschaft.

Bei der Definition:

public string Name { get; private set; }

Heißt es nicht { get; read only set; }

sondern

{ get; private set; }

Das bedeutet, man erlaubt nur den Private Zugriff auf den Setter.

Das wiederum bedeutet, Zugriffe bzw. Wertzuweisungen, wie die nachfolgenden funktionieren einwandfrei.

thumbs_up Beispiel Konstruktoren:

public Customer()
{
    CustomerID = 1;
}

 

public Customer(int id)
{
    CustomerID = id;
}

thumbs_up Beispiel einer Methode der Klasse:

public void incCustomerID()
{
    CustomerID++;
}


Zusammenfassend bedeutet dies, dass wir auf die Schreibgeschützten Automatischen Eigenschaften einer Klasse, innerhalb der Klasse, also private, schreibenden Zugriff auf die Eigenschaften selbst haben.

Wir benötigen also gar kein Wissen über die vom Compiler erzeugte private anonyme Variable um schreibenden Zugriff auf die ansonsten Schreibgeschützte Eigenschaft zu haben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.