Menu
CoddyTech

Eigenschaften zur Kapselung

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

Eigenschaften sind das wichtigste Mittel zur Implementierung von Kapselung in C#. Anstatt Felder direkt zugänglich zu machen, umschließt du sie mit Eigenschaften, die steuern, wie auf Daten zugegriffen wird und wie sie geändert werden.

Das Muster kombiniert ein privates Feld mit einer öffentlichen Eigenschaft, die in ihren Zugriffsmethoden eine Validierung oder Logik enthält:

public class Temperature
{
    private double celsius;
    
    public double Celsius
    {
        get { return celsius; }
        set
        {
            if (value < -273.15)
                celsius = -273.15;  // Minimum: absoluter Nullpunkt
            else
                celsius = value;
        }
    }
}

Jetzt kann externer Code keine unmögliche Temperatur mehr festlegen. Die Eigenschaft fungiert als Wächter und stellt sicher, dass dein Objekt immer in einem gültigen Zustand bleibt. Das ist Kapselung in Aktion – die internen Daten sind geschützt und bleiben dennoch über eine kontrollierte Schnittstelle zugänglich.

Du kannst Eigenschaften auch verwenden, um Werte zu berechnen oder Nebenwirkungen auszulösen:

public double Fahrenheit
{
    get { return celsius * 9 / 5 + 32; }
    set { celsius = (value - 32) * 5 / 9; }
}

Die Außenwelt sieht zwei Eigenschaften, intern gibt es jedoch nur ein Feld. Eigenschaften ermöglichen es dir, Implementierungsdetails zu ändern, ohne den Code zu beschädigen, der deine Klasse verwendet – ein entscheidender Vorteil der richtigen Kapselung.

challenge icon

Aufgabe

Einfach

Erstellen wir ein Produktinventarsystem, das Eigenschaften verwendet, um die Datenintegrität zu schützen. Du erstellst eine Klasse, in der Preise niemals negativ sein können und Mengen immer innerhalb gültiger Grenzen gehalten werden – damit wird gezeigt, wie Eigenschaften als Wächter für deine Daten fungieren.

Du organisierst deinen Code auf zwei Dateien:

  • Product.cs: Erstelle eine Product-Klasse im Namespace Inventory, die Produktinformationen verwaltet und mithilfe von Eigenschaften validiert. Dein Produkt benötigt:
    • Ein privates Feld price (decimal) mit einer öffentlichen Eigenschaft Price, die sicherstellt, dass der Preis niemals unter 0 fällt – versucht jemand, einen negativen Preis festzulegen, soll stattdessen 0 gespeichert werden
    • Ein privates Feld quantity (int) mit einer öffentlichen Eigenschaft Quantity, die Werte zwischen 0 und 1000 hält – Werte unter 0 werden zu 0, Werte über 1000 werden zu 1000
    • Eine öffentliche automatisch implementierte Eigenschaft Name (string)
    • Eine berechnete schreibgeschützte Eigenschaft TotalValue, die Price * Quantity zurückgibt
    Füge einen Konstruktor hinzu, der Name, Preis und Menge (in dieser Reihenfolge) entgegennimmt und alle Werte über die Eigenschaften festlegt, damit die Validierung angewendet wird.
  • Program.cs: Erstelle in deiner Hauptdatei anhand von Eingabewerten ein Product. Versuche dann, den Preis und die Menge mithilfe zusätzlicher Eingabewerte zu ändern, die ungültig sein könnten. Gib den Zustand des Produkts nach der Erstellung und nach jeder Änderung aus, um zu sehen, wie die Eigenschaften die Daten schützen.

Du erhältst fünf Eingaben:

  • Produktname
  • Anfangspreis (decimal)
  • Anfangsmenge (Ganzzahl)
  • Festzulegender neuer Preis (decimal, möglicherweise negativ)
  • Festzulegende neue Menge (Ganzzahl, möglicherweise außerhalb des zulässigen Bereichs)

Gib die Ausgabe in diesem Format aus:

After creation:
{Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}
After modifications:
{Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}

Wenn die Eingaben zum Beispiel Laptop, 999.99, 50, -100 und 1500 lauten, sollte die Ausgabe folgendermaßen aussehen:

After creation:
Laptop: Price=999.99, Qty=50, Total=49999.50
After modifications:
Laptop: Price=0, Qty=1000, Total=0

Beachte, wie der negative Preis zu 0 wurde und die Menge von 1500 auf 1000 begrenzt wurde. Deine Eigenschaften schützen das Objekt vor ungültigen Zuständen – das ist Kapselung in Aktion!

Probier es selbst

using System;
using Inventory;

class Program
{
    public static void Main(string[] args)
    {
        // Eingaben einlesen
        string name = Console.ReadLine();
        decimal initialPrice = Convert.ToDecimal(Console.ReadLine());
        int initialQuantity = Convert.ToInt32(Console.ReadLine());
        decimal newPrice = Convert.ToDecimal(Console.ReadLine());
        int newQuantity = Convert.ToInt32(Console.ReadLine());

        // TODO: Ein Product mit den Anfangswerten erstellen
        
        // TODO: Den Zustand des Produkts nach der Erstellung ausgeben
        Console.WriteLine("After creation:");
        // Ausgabeformat: {Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}
        
        // TODO: Preis und Menge mit den neuen Werten ändern
        
        // TODO: Den Zustand des Produkts nach den Änderungen ausgeben
        Console.WriteLine("After modifications:");
        // Ausgabeformat: {Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}
    }
}
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