Menu
Coddy logo textTech

Члены в виде выражений

Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy. Урок 14 из 70.

Expression-bodied члены предоставляют краткий синтаксис для членов, содержащих только одно выражение. Вместо написания полных тел методов или свойств с фигурными скобками используется стрелочный синтаксис =>.

Для методов, возвращающих одно выражение, можно заменить всё тело:

// Традиционный метод
public int Add(int a, int b)
{
    return a + b;
}

// Метод с телом-выражением
public int Add(int a, int b) => a + b;

Этот синтаксис также работает со свойствами, доступными только для чтения, которые вы уже кратко видели:

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

Вы также можете использовать тела выражений для отдельных геттеров и сеттеров свойств:

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

Даже конструкторы могут использовать этот синтаксис, если они содержат единственную инструкцию:

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

Члены с телом-выражением делают ваш код более читаемым, когда логика проста. Используйте их для простых операций, но придерживайтесь традиционных тел, когда вам нужны несколько инструкций или сложная логика.

challenge icon

Задание

Легко

Давайте создадим калькулятор стоимости продукта, демонстрирующий возможности членов, определённых выражениями, для написания чистого и лаконичного кода.

Вы создадите два файла, чтобы организовать свой код:

  • Product.cs: Define Product class в пространстве имён Store. Этот класс должен демонстрировать различные члены, определённые выражениями:
    • Свойство auto-implemented Name (string) и BasePrice (decimal)
    • Конструктор, определённый выражением, который задаёт оба свойства
    • Свойство только для чтения, определённое выражением, TaxAmount, которое calculates 10% от базовой цены
    • Свойство только для чтения, определённое выражением, TotalPrice, которое возвращает базовую цену плюс сумму налога
    • method, определённый выражением, GetDiscount(decimal percentage), который возвращает сумму discount (базовая цена, умноженная на percentage и делённая на 100)
    • method, определённый выражением, GetFinalPrice(decimal discountPercentage), который возвращает общую цену minus discount
  • Program.cs: В вашем основном файле создайте Product, используя входные значения, а затем выведите разбивку его стоимости.

Вы получите три входных значения:

  • Название продукта
  • Базовая цена
  • Процент discount для применения

Выведите сведения о стоимости в следующем формате:

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

Например, если входными значениями являются Laptop, 1000 и 15, результат должен быть таким:

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

Форматируйте каждое денежное значение ровно до двух знаков после запятой, например value.ToString("F2") или $"{value:F2}". Это относится в равной степени к базовой цене, налогу, общей цене, discount и итоговой цене.

Не забудьте использовать синтаксис стрелки => для всех членов, содержащих одно выражение. Это сохраняет ваш код чистым и понятным!

Попробуйте сами

using System;
using Store;

class Program
{
    public static void Main(string[] args)
    {
        // Считать входные данные
        string name = Console.ReadLine();
        decimal basePrice = Convert.ToDecimal(Console.ReadLine());
        decimal discountPercentage = Convert.ToDecimal(Console.ReadLine());

        // Создать объект Product, используя входные значения
        Product product = new Product(name, basePrice);

        // Вычислить сумму скидки с помощью метода GetDiscount
        decimal discountAmount = product.GetDiscount(discountPercentage);

        // Вычислить итоговую цену с помощью метода GetFinalPrice
        decimal finalPrice = product.GetFinalPrice(discountPercentage);

        // Вывести сведения о ценах в требуемом формате:
        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 iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор C#