Menu
Coddy logo textTech

Member mit Ausdruckskörpern

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

Ausdruckskörper-Mitglieder bieten eine prägnante Syntax für Member, die nur einen einzigen Ausdruck enthalten. Anstatt vollständige Methoden- oder Eigenschaftskörper mit geschweiften Klammern zu schreiben, verwendest du die =>-Pfeilsyntax.

Bei Methoden, die einen einzelnen Ausdruck zurückgeben, kannst du den gesamten Rumpf ersetzen:

// Traditionelle Methode
public int Add(int a, int b)
{
    return a + b;
}

// Expression-bodied-Methode
public int Add(int a, int b) => a + b;

Diese Syntax funktioniert auch für schreibgeschützte Eigenschaften, die du bereits kurz gesehen hast:

public class Circle
{
    public double Radius { get; set; }
    public double Area => Math.PI * Radius * Radius;
    public double Circumference => 2 * Math.PI * Radius;
}

Du kannst Ausdruckskörper auch einzeln für Property-Getter und -Setter verwenden:

private string name;
public string Name
{
    get => name;
    set => name = value.Trim();
}

Auch Konstruktoren können diese Syntax verwenden, wenn sie eine einzelne Anweisung enthalten:

public class Person
{
    public string Name { get; }
    public Person(string name) => Name = name;
}

Ausdruckskörper-Mitglieder machen deinen Code lesbarer, wenn die Logik einfach ist. Verwende sie für unkomplizierte Operationen, aber bleibe bei herkömmlichen Methodenkörpern, wenn du mehrere Anweisungen oder komplexe Logik benötigst.

challenge icon

Aufgabe

Einfach

Erstellen wir einen Produktpreisrechner, der die Leistungsfähigkeit ausdruckskörperbasierter Member zeigt, um sauberen, prägnanten Code zu schreiben.

Du erstellst zwei Dateien, um deinen Code zu organisieren:

  • Product.cs: Definiere eine Product-Klasse im Store-Namespace. Diese Klasse soll verschiedene ausdruckskörperbasierte Member demonstrieren:
    • Eine automatisch implementierte Eigenschaft Name (string) und BasePrice (decimal)
    • Einen ausdruckskörperbasierten Konstruktor, der beide Eigenschaften festlegt
    • Eine ausdruckskörperbasierte schreibgeschützte Eigenschaft TaxAmount, die 10 % des Grundpreises berechnet
    • Eine ausdruckskörperbasierte schreibgeschützte Eigenschaft TotalPrice, die den Grundpreis zuzüglich des Steuerbetrags zurückgibt
    • Eine ausdruckskörperbasierte Methode GetDiscount(decimal percentage), die den Rabattbetrag zurückgibt (Grundpreis multipliziert mit dem Prozentsatz, geteilt durch 100)
    • Eine ausdruckskörperbasierte Methode GetFinalPrice(decimal discountPercentage), die den Gesamtpreis abzüglich des Rabatts zurückgibt
  • Program.cs: Erstelle in deiner Hauptdatei ein Product-Objekt anhand von Eingabewerten und zeige anschließend die Preisaufschlüsselung an.

Du erhältst drei Eingaben:

  • Produktname
  • Grundpreis
  • Anzuwendender Rabattprozentsatz

Gib die Preisdaten in diesem Format aus:

Product: {Name}
Base Price: {BasePrice}
Tax (10%): {TaxAmount}
Total Price: {TotalPrice}
Discount ({percentage}%): {discountAmount}
Final Price: {finalPrice}

Wenn die Eingaben beispielsweise Laptop, 1000 und 15 lauten, sollte die Ausgabe folgendermaßen aussehen:

Product: Laptop
Base Price: 1000.00
Tax (10%): 100.00
Total Price: 1100.00
Discount (15%): 150.00
Final Price: 950.00

Formatiere jeden Geldbetrag mit genau zwei Dezimalstellen, zum Beispiel mit value.ToString("F2") oder $"{value:F2}". Das gilt gleichermaßen für den Grundpreis, die Steuer, den Gesamtpreis, den Rabatt und den Endpreis.

Denke daran, für alle Member, die einen einzelnen Ausdruck enthalten, die Pfeilsyntax => zu verwenden. So bleibt dein Code sauber und gut lesbar!

Probier es selbst

using System;
using Store;

class Program
{
    public static void Main(string[] args)
    {
        // Eingaben lesen
        string name = Console.ReadLine();
        decimal basePrice = Convert.ToDecimal(Console.ReadLine());
        decimal discountPercentage = Convert.ToDecimal(Console.ReadLine());

        // Erstelle ein Product-Objekt mit den Eingabewerten
        Product product = new Product(name, basePrice);

        // Berechne den Rabattbetrag mit der GetDiscount-Methode
        decimal discountAmount = product.GetDiscount(discountPercentage);

        // Berechne den Endpreis mit der GetFinalPrice-Methode
        decimal finalPrice = product.GetFinalPrice(discountPercentage);

        // Gib die Preisdetails im erforderlichen Format aus:
        Console.WriteLine($"Product: {product.Name}");
        Console.WriteLine($"Base Price: {product.BasePrice:F2}");
        Console.WriteLine($"Tax (10%): {product.TaxAmount:F2}");
        Console.WriteLine($"Total Price: {product.TotalPrice:F2}");
        Console.WriteLine($"Discount ({discountPercentage}%): {discountAmount:F2}");
        Console.WriteLine($"Final Price: {finalPrice:F2}");
    }
}
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