Menu
Coddy logo textTech

Eigenschaften zur Kapselung

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

Eigenschaften sind das wichtigste Werkzeug zur Implementierung der Kapselung in C#. Anstatt Felder direkt offenzulegen, 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 Validierung oder Logik in ihren Accessoren enthält:

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

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

Sie können Eigenschaften auch verwenden, um Werte zu berechnen oder Seiteneffekte auszulösen:

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

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

challenge icon

Aufgabe

Einfach

Lass uns ein Produktinventarsystem erstellen, das Eigenschaften verwendet, um die Datenintegrität zu schützen. Du erstellst eine Klasse, in der Preise niemals negativ werden können und Mengen immer innerhalb gültiger Grenzen bleiben – und demonstrierst damit, wie Eigenschaften als Schutzmechanismen für deine Daten fungieren.

Du wirst deinen Code auf zwei Dateien aufteilen:

  • Product.cs: Erstelle eine Product-Klasse im Inventory-Namespace, die Produktinformationen mit Validierung durch Eigenschaften verwaltet. Dein Produkt benötigt:
    • Ein privates Feld price (decimal) mit einer öffentlichen Price-Eigenschaft, die sicherstellt, dass der Preis niemals unter 0 fällt – wenn jemand versucht, einen negativen Preis festzulegen, soll stattdessen 0 gespeichert werden
    • Ein privates Feld quantity (int) mit einer öffentlichen Quantity-Eigenschaft, 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, sodass die Validierung angewendet wird.
  • Program.cs: Erstelle in deiner Hauptdatei ein Product-Objekt mithilfe von Eingabewerten. Versuche anschließend, den Preis und die Menge mit zusätzlichen Eingabewerten zu ändern, die möglicherweise ungültig sind. 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
  • Anfänglicher Preis (decimal)
  • Anfängliche Menge (integer)
  • Neuer festzulegender Preis (decimal, kann negativ sein)
  • Neu festzulegende Menge (integer, kann außerhalb des gültigen Bereichs liegen)

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 beispielsweise Laptop, 999.99, 50, -100 und 1500 lauten, sollte die Ausgabe wie folgt 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 – hier zeigt sich Kapselung in der Praxis!

Probier es selbst

using System;
using Inventory;

class Program
{
    public static void Main(string[] args)
    {
        // Eingaben lesen
        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: Erstellen Sie ein Produkt mit den Anfangswerten
        
        // TODO: Geben Sie den Produktzustand nach der Erstellung aus
        Console.WriteLine("After creation:");
        // Ausgabeformat: {Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}
        
        // TODO: Ändern Sie den Preis und die Menge mit den neuen Werten
        
        // TODO: Geben Sie den Produktzustand nach den Änderungen aus
        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