Expression-Bodied Member
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy — Lektion 14 von 70.
Expression-bodied Members 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 Textkörper ersetzen:
// Traditionelle Methode
public int Add(int a, int b)
{
return a + b;
}
// Methode mit Ausdruckskörper
public int Add(int a, int b) => a + b;Diese Syntax funktioniert auch für schreibgeschützte Eigenschaften, die 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 Ausdruckskörper auch einzeln für Getter und Setter von Eigenschaften 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 unkomplizierte Operationen, aber bleiben Sie bei herkömmlichen Methodenkörpern, wenn Sie mehrere Anweisungen oder komplexe Logik benötigen.
Aufgabe
EinfachLassen Sie uns einen Produktpreisrechner erstellen, der die Leistungsfähigkeit von Ausdruckskörper-Membern (expression-bodied members) demonstriert, um sauberen und prägnanten Code zu schreiben.
Sie werden zwei Dateien erstellen, um Ihren Code zu organisieren:
Product.cs: Definieren Sie eine KlasseProductim NamespaceStore. Diese Klasse soll verschiedene Ausdruckskörper-Member demonstrieren:- Automatisch implementierte Eigenschaften
Name(string) undBasePrice(decimal) - Einen Ausdruckskörper-Konstruktor, der beide Eigenschaften setzt
- Eine schreibgeschützte Ausdruckskörper-Eigenschaft
TaxAmount, die 10 % des Basispreises berechnet - Eine schreibgeschützte Ausdruckskörper-Eigenschaft
TotalPrice, die den Basispreis plus Steuerbetrag zurückgibt - Eine Ausdruckskörper-Methode
GetDiscount(decimal percentage), die den Rabattbetrag zurückgibt (Basispreis multipliziert mit dem Prozentsatz dividiert durch 100) - Eine Ausdruckskörper-Methode
GetFinalPrice(decimal discountPercentage), die den Gesamtpreis abzüglich des Rabatts zurückgibt
- Automatisch implementierte Eigenschaften
Program.cs: Erstellen Sie in Ihrer Hauptdatei einProductunter Verwendung von Eingabewerten und zeigen Sie dann die Aufschlüsselung der Preisgestaltung an.
Sie erhalten drei Eingaben:
- Produktname
- Basispreis
- Anzuwendender Rabattprozentsatz
Geben Sie 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 sind, sollte die Ausgabe wie folgt aussehen:
Product: Laptop
Base Price: 1000
Tax (10%): 100
Total Price: 1100
Discount (15%): 150
Final Price: 950Denken Sie daran, die => Pfeilsyntax für alle Member zu verwenden, die einen einzelnen Ausdruck enthalten. Dies hält Ihren Code sauber und lesbar!
Spickzettel
Expression-bodied Member verwenden die Pfeilsyntax => für Member, die einen einzelnen Ausdruck enthalten, und bieten eine prägnante Alternative zu herkömmlichen Methoden- und Eigenschaftskörpern.
Expression-bodied Methoden:
// Herkömmliche Methode
public int Add(int a, int b)
{
return a + b;
}
// Expression-bodied Methode
public int Add(int a, int b) => a + b;Schreibgeschützte Expression-bodied Eigenschaften:
public class Circle
{
public double Radius { get; set; }
public double Area => Math.PI * Radius * Radius;
public double Circumference => 2 * Math.PI * Radius;
}Expression-bodied Getter und Setter für Eigenschaften:
private string name;
public string Name
{
get => name;
set => name = value.Trim();
}Expression-bodied Konstruktoren:
public class Person
{
public string Name { get; }
public Person(string name) => Name = name;
}Verwenden Sie Expression-bodied Member für einfache Operationen. Verwenden Sie für mehrere Anweisungen oder komplexe Logik herkömmliche Körper.
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());
// TODO: Erstelle ein Product-Objekt unter Verwendung der Eingabewerte
// TODO: Berechne den Rabattbetrag mit der Methode GetDiscount
// TODO: Berechne den Endpreis mit der Methode GetFinalPrice
// TODO: Drucke die Preisdetails im erforderlichen Format aus:
// Product: {Name}
// Base Price: {BasePrice}
// Tax (10%): {TaxAmount}
// Total Price: {TotalPrice}
// Discount ({percentage}%): {discountAmount}
// Final Price: {finalPrice}
}
}
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