Składowe z ciałem wyrażeniowym
Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 14 z 70.
Elementy z ciałem będącym wyrażeniem zapewniają zwięzłą składnię dla elementów zawierających tylko jedno wyrażenie. Zamiast pisać pełne ciała metod lub właściwości w nawiasach klamrowych, używasz składni strzałki =>.
W przypadku metod zwracających pojedyncze wyrażenie możesz zastąpić całe ciało:
// Tradycyjna metoda
public int Add(int a, int b)
{
return a + b;
}
// Metoda z ciałem wyrażeniowym
public int Add(int a, int b) => a + b;Ta składnia działa również w przypadku właściwości tylko do odczytu, co zostało już krótko pokazane:
public class Circle
{
public double Radius { get; set; }
public double Area => Math.PI * Radius * Radius;
public double Circumference => 2 * Math.PI * Radius;
}Możesz też używać ciał wyrażeń osobno dla metod pobierających i ustawiających właściwości:
private string name;
public string Name
{
get => name;
set => name = value.Trim();
}Nawet konstruktory mogą używać tej składni, gdy zawierają pojedynczą instrukcję:
public class Person
{
public string Name { get; }
public Person(string name) => Name = name;
}Elementy z ciałem wyrażeniowym zwiększają czytelność kodu, gdy logika jest prosta. Używaj ich do nieskomplikowanych operacji, ale stosuj tradycyjne ciała, gdy potrzebujesz wielu instrukcji lub złożonej logiki.
Wyzwanie
ŁatwyZbudujmy kalkulator cen produktów, który pokaże, jak wyrażenia przypisane do składowych pozwalają pisać czysty i zwięzły kod.
Utworzysz dwa pliki, aby uporządkować kod:
Product.cs: Zdefiniuj klasęProductw przestrzeni nazwStore. Klasa powinna demonstrować różne składowe wyrażeniowe:- Automatycznie implementowane właściwości
Name(string) iBasePrice(decimal) - Konstruktor wyrażeniowy, który ustawia obie właściwości
- Wyrażeniową właściwość tylko do odczytu
TaxAmount, która oblicza 10% ceny bazowej - Wyrażeniową właściwość tylko do odczytu
TotalPrice, która zwraca cenę bazową powiększoną o kwotę podatku - Wyrażeniową metodę
GetDiscount(decimal percentage), która zwraca kwotę rabatu (cena bazowa pomnożona przez wartość procentową i podzielona przez 100) - Wyrażeniową metodę
GetFinalPrice(decimal discountPercentage), która zwraca cenę całkowitą pomniejszoną o rabat
- Automatycznie implementowane właściwości
Program.cs: W głównym pliku utwórz obiektProductna podstawie wprowadzonych wartości, a następnie wyświetl szczegółowe zestawienie ceny.
Otrzymasz trzy dane wejściowe:
- Nazwa produktu
- Cena bazowa
- Procent rabatu do zastosowania
Wyświetl szczegóły ceny w tym formacie:
Product: {Name}
Base Price: {BasePrice}
Tax (10%): {TaxAmount}
Total Price: {TotalPrice}
Discount ({percentage}%): {discountAmount}
Final Price: {finalPrice}Na przykład, jeśli danymi wejściowymi są Laptop, 1000 i 15, wynik powinien wyglądać tak:
Product: Laptop
Base Price: 1000.00
Tax (10%): 100.00
Total Price: 1100.00
Discount (15%): 150.00
Final Price: 950.00Sformatuj każdą wartość pieniężną do dokładnie dwóch miejsc po przecinku, na przykład value.ToString("F2") lub $"{value:F2}". Dotyczy to ceny bazowej, podatku, sumy, rabatu i ceny końcowej.
Pamiętaj, aby używać składni strzałki => dla wszystkich składowych zawierających pojedyncze wyrażenie. Dzięki temu kod będzie przejrzysty i czytelny!
Spróbuj swoich sił
using System;
using Store;
class Program
{
public static void Main(string[] args)
{
// Odczytaj dane wejściowe
string name = Console.ReadLine();
decimal basePrice = Convert.ToDecimal(Console.ReadLine());
decimal discountPercentage = Convert.ToDecimal(Console.ReadLine());
// Utwórz obiekt Product, używając wartości wejściowych
Product product = new Product(name, basePrice);
// Oblicz kwotę rabatu za pomocą metody GetDiscount
decimal discountAmount = product.GetDiscount(discountPercentage);
// Oblicz cenę końcową za pomocą metody GetFinalPrice
decimal finalPrice = product.GetFinalPrice(discountPercentage);
// Wyświetl szczegóły cenowe w wymaganym formacie:
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}");
}
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrznePrzestrzenie nazw i dyrektywyWprowadzenie do klas i obiektówSłowo kluczowe „this”Metody i parametryPola a właściwościKonstruktoryInicjalizatory obiektówPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawowa składnia dziedziczenia (:)Słowo kluczowe 'base'Słowa kluczowe virtual i overrideKlasy sealedBazowa klasa 'object'Powtórzenie – hierarchia pracowników7Zaawansowane funkcje
Przeciążanie operatorówIndeksery (this[])Nadpisywanie ToString()Metody rozszerzającePodsumowanie – własna lista2Właściwości i składowe statyczne
Właściwości automatyczneWłaściwości tylko do odczytu i zapisuPola i metody statyczneKlasy statyczneSkładowe z ciałem wyrażeniowym5Polimorfizm i interfejsy
Polimorfizm czasu kompilacji a czasu wykonaniaInterfejs a klasa abstrakcyjnaWiele interfejsówJawne implementowanie interfejsówRzutowanie w górę i w dółPowtórka — kalkulator kształtów8Zaawansowane koncepcje OOP
Kompozycja zamiast dziedziczeniaTypy generyczne (klasy i metody)Delegaty i zdarzeniaAtrybuty i refleksjaIDisposable i instrukcja usingPodstawy wstrzykiwania zależności11Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu3Architektura klas
Dane instancji a dane statyczneSłowa kluczowe 'readonly' i 'const'Pola zapasowePowtórzenie — menedżer kont bankowych6Hermetyzacja
Modyfikatory dostępuWłaściwości w hermetyzacjiImplementacja ukrywania danychWzorce niezmiennościPowtórka — dane studentów9Argumenty zmiennej liczby
Słowo kluczowe „params”Parametry opcjonalneArgumenty nazwanePrzeciążanie metodPoćwicz samodzielnie: Kompilator C# online