Expression-Bodied Member
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy — Lektion 14 von 70.
Expression-bodied-Elemente bieten eine prägnante Syntax für Elemente, die nur einen einzelnen Ausdruck enthalten. Anstatt vollständige Methoden- oder Eigenschaftskörper mit geschweiften Klammern zu schreiben, verwenden Sie die =>-Pfeilsyntax.
Für Methoden, die einen einzelnen Ausdruck zurückgeben, können Sie 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, was Sie bereits kurz gesehen haben:
public class Circle
{
public double Radius { get; set; }
public double Area => Math.PI * Radius * Radius;
public double Circumference => 2 * Math.PI * Radius;
}Sie können Expression Bodies auch für Getter und Setter von Eigenschaften individuell verwenden:
private string name;
public string Name
{
get => name;
set => name = value.Trim();
}Sogar 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;
}Expression-bodied members machen Ihren Code lesbarer, wenn die Logik einfach ist. Verwenden Sie sie für einfache Operationen, aber bleiben Sie bei traditionellen Anweisungsblöcken, wenn Sie mehrere Anweisungen oder eine komplexe Logik benötigen.
Aufgabe
EinfachLass uns einen Produktpreisrechner bauen, der die Leistungsfähigkeit von expression-bodied Members demonstriert, um sauberen und prägnanten Code zu schreiben.
Du wirst zwei Dateien erstellen, um deinen Code zu strukturieren:
Product.cs: Definiere eineProduct-Klasse imStore-Namespace. Diese Klasse sollte verschiedene expression-bodied Members demonstrieren:- Eine auto-implemented Property
Name(string) undBasePrice(decimal) - Einen expression-bodied Konstruktor, der beide Properties setzt
- Eine expression-bodied schreibgeschützte Property
TaxAmount, die 10% des Basispreises berechnet - Eine expression-bodied schreibgeschützte Property
TotalPrice, die den Basispreis plus Steuerbetrag zurückgibt - Eine expression-bodied Methode
GetDiscount(decimal percentage), die den Rabattbetrag zurückgibt (Basispreis multipliziert mit Prozent geteilt durch 100) - Eine expression-bodied Methode
GetFinalPrice(decimal discountPercentage), die den Gesamtpreis abzüglich des Rabatts zurückgibt
- Eine auto-implemented Property
Program.cs: Erstelle in deiner Hauptdatei einProductunter Verwendung von Eingabewerten und zeige dann dessen Preisaufschlüsselung an.
Du wirst drei Eingaben erhalten:
- Produktname
- Basispreis
- Anzuwendender Rabattprozentsatz
Gib die Preisdetails 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 wie folgt 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 auf genau zwei Nachkommastellen — zum Beispiel value.ToString("F2") oder $"{value:F2}". Das gilt gleichermaßen für den Basispreis, die Steuer, den Gesamtbetrag, den Rabatt und den Endpreis.
Denke daran, die Pfeilsyntax => für alle Members zu verwenden, die einen einzelnen Ausdruck enthalten. Das hält deinen Code sauber und 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. EigenschaftenKonstruktorenObjekt-InitialisiererZusammenfassung - Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (:) SyntaxDas 'base'-SchlüsselwortVirtual & Override SchlüsselwörterVersiegelte KlassenDie 'object'-BasisklasseZusammenfassung – Mitarbeiter-Hierarchie7Fortgeschrittene Funktionen
OperatorüberladungIndexer (this[])ToString() überschreibenErweiterungsmethodenZusammenfassung - Benutzerdefinierte Liste2Eigenschaften & Statische Member
Automatisch implementierte EigenschaftenRead-Only- & Write-Only-EigenschaftenStatische Felder & MethodenStatische KlassenExpression-Bodied Member5Polymorphismus & Interfaces
Compile- vs. Runtime-PolymorphismusInterface vs. abstrakte KlasseMehrfache InterfacesExplizite InterfacesUpcasting & DowncastingRecap – Shape Calculator3Klassenarchitektur
Instanz- vs. statische Daten'readonly' & 'const' SchlüsselwörterBacking FieldsZusammenfassung - Bankkonto-Manager6Kapselung
ZugriffsmodifikatorenProperties zur KapselungImplementierung von Data HidingImmutability-MusterRückblick – Studierendendaten