Menu
Coddy logo textTech

Nur lesbare/schreibbare Eigenschaften

Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy. Lektion 11 von 70.

Manchmal benötigst du Eigenschaften, die nur gelesen oder nur geschrieben werden können. Du kannst dies steuern, indem du private für einzelne Accessoren verwendest.

Eine schreibgeschützte Eigenschaft hat einen öffentlichen Getter, aber einen privaten setter (oder überhaupt keinen setter):

public class User
{
    public string Username { get; private set; }
    
    public User(string username)
    {
        Username = username;
    }
}

Externer Code kann Username lesen, aber nur die Klasse selbst kann ihn ändern. Dies ist nützlich für Werte, die bei der Konstruktion einmal festgelegt werden sollten.

Eine schreibgeschützte Eigenschaft hat einen öffentlichen Setter, aber einen privaten Getter:

public class Account
{
    public string Password { private get; set; }
    
    public bool ValidatePassword(string input)
    {
        return input == Password;
    }
}

Nur-Schreib-Eigenschaften sind selten, aber nützlich für sensible Daten wie Passwörter, wenn du Eingaben akzeptieren möchtest, ohne den gespeicherten Wert offenzulegen.

Du kannst auch wirklich schreibgeschützte Eigenschaften mit nur einem Getter erstellen:

public class Circle
{
    public double Radius { get; }
    public double Area => Math.PI * Radius * Radius;
    
    public Circle(double radius)
    {
        Radius = radius;
    }
}

Eigenschaften mit ausschließlich get; können nur im Konstruktor oder bei der Deklaration zugewiesen werden und sind nach der Erstellung des Objekts unveränderlich.

challenge icon

Aufgabe

Einfach

Erstellen wir ein sicheres Konfigurationssystem, das veranschaulicht, wann schreibgeschützte und nur beschreibbare Eigenschaften zum Schutz sensibler Daten verwendet werden.

Du wirst zwei Dateien erstellen, um deinen Code zu organisieren:

  • Config.cs: Definiere eine ServerConfig-Klasse im Settings-Namespace, die die Serverkonfiguration verwaltet. Sie sollte Folgendes enthalten:
    • Eine schreibgeschützte Eigenschaft ServerName (kann nur im Konstruktor festgelegt werden)
    • Eine schreibgeschützte Eigenschaft Port mit einem privaten Setter (wird über den Konstruktor festgelegt)
    • Eine nur beschreibbare Eigenschaft ApiKey, die einen geheimen Schlüssel intern speichert
    • Eine Methode ValidateApiKey(string key), die true zurückgibt, wenn der bereitgestellte Schlüssel mit dem gespeicherten übereinstimmt
    • Einen Konstruktor, der den Servernamen und den Port akzeptiert
  • Program.cs: Erstelle in deiner Hauptdatei ein ServerConfig-Objekt mithilfe von Eingabewerten, lege den API-Schlüssel fest und validiere ihn anschließend gegen einen Testschlüssel.

Du erhältst vier Eingaben:

  • Servername
  • Portnummer
  • Zu speichernder API-Schlüssel
  • Zu validierender API-Schlüssel

Gib die Serverdetails und das Validierungsergebnis in diesem Format aus:

Server: {ServerName}, Port: {Port}
API Key Valid: {True/False}

Wenn die Eingaben beispielsweise MainServer, 8080, secret123 und secret123 lauten, sollte die Ausgabe wie folgt aussehen:

Server: MainServer, Port: 8080
API Key Valid: True

Probier es selbst

using System;
using Settings;

class Program
{
    public static void Main(string[] args)
    {
        // Eingaben lesen
        string serverName = Console.ReadLine();
        int port = Convert.ToInt32(Console.ReadLine());
        string apiKeyToStore = Console.ReadLine();
        string apiKeyToValidate = Console.ReadLine();

        // TODO: Erstelle ein ServerConfig-Objekt mit serverName und port

        // TODO: Setze den API-Schlüssel über die nur-schreibbare Eigenschaft

        // TODO: Validiere den API-Schlüssel und gib die Ergebnisse aus
        // Format: Server: {ServerName}, Port: {Port}
        //         API Key Valid: {True/False}
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C#-Compiler