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.
Aufgabe
EinfachErstellen 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 eineProduct-Klasse imStore-Namespace. Diese Klasse soll verschiedene ausdruckskörperbasierte Member demonstrieren:- Eine automatisch implementierte Eigenschaft
Name(string) undBasePrice(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
- Eine automatisch implementierte Eigenschaft
Program.cs: Erstelle in deiner Hauptdatei einProduct-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.00Formatiere 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}");
}
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienNamespaces & DirektivenEinführung in Klassen & ObjekteDas 'this'-SchlüsselwortMethoden und ParameterFelder vs. EigenschaftenKonstruktorenObjektinitialisiererWiederholung – Einfacher Taschenrechner4Vererbung
Grundlegende Vererbungs-(:)-SyntaxDas „base“-Schlüsselwort„virtual“- und „override“-SchlüsselwörterVersiegelte KlassenDie „object“-BasisklasseWiederholung – Mitarbeiterhierarchie7Erweiterte Funktionen
Überladen von OperatorenIndexer (this[])ToString()-ÜberschreibungErweiterungsmethodenRückblick – Benutzerdefinierte Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterThread-sicheres SingletonFactory-MusterObserver-Muster (Events)Strategy-Muster13Abschließende Herausforderungen
E-Learning-PlattformKomponente für SpielfigurenFahrzeugvermietungsdienst2Eigenschaften & statische Member
Automatisch implementierte EigenschaftenNur lesbare/schreibbare EigenschaftenStatische Felder & MethodenStatische KlassenMember mit Ausdruckskörpern5Polymorphie & Interfaces
Compile- vs. Laufzeit-PolymorphieInterface vs. abstrakte KlasseMehrere InterfacesExplizite InterfacesUpcasting & DowncastingWiederholung – Formenrechner3Klassenarchitektur
Instanz- vs. statische DatenSchlüsselwörter 'readonly' & 'const'Backing FieldsRückblick – Bankkontenverwaltung6Kapselung
ZugriffsmodifikatorenEigenschaften zur KapselungImplementierung der DatenkapselungMuster für UnveränderlichkeitRückblick – SchülerdatenÜbe selbstständig: Online-C#-Compiler