Menu
Coddy logo textTech

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

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

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

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

// Традиционный метод
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

Задание

Легко

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

Вы создадите два файла для организации вашего кода:

  • Product.cs: Определите класс Product в пространстве имен Store. Этот класс должен демонстрировать различные члены, возвращающие выражение:
    • Автоматически реализуемые свойства Name (string) и BasePrice (decimal)
    • Конструктор, возвращающий выражение, который устанавливает оба свойства
    • Свойство только для чтения, возвращающее выражение, TaxAmount, которое рассчитывает 10% от базовой цены
    • Свойство только для чтения, возвращающее выражение, TotalPrice, которое возвращает базовую цену плюс сумму налога
    • Метод, возвращающий выражение, GetDiscount(decimal percentage), который возвращает сумму скидки (базовая цена, умноженная на процент и деленная на 100)
    • Метод, возвращающий выражение, GetFinalPrice(decimal discountPercentage), который возвращает общую стоимость за вычетом скидки
  • Program.cs: В основном файле создайте объект Product, используя входные значения, а затем выведите разбивку его стоимости.

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

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

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

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
Tax (10%): 100
Total Price: 1100
Discount (15%): 150
Final Price: 950

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

Шпаргалка

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

Методы с телом-выражением:

// Традиционный метод
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;
}

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

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

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());

        // TODO: Создайте объект Product, используя введенные значения

        // TODO: Рассчитайте сумму скидки, используя метод GetDiscount

        // TODO: Рассчитайте итоговую цену, используя метод GetFinalPrice

        // TODO: Выведите детали ценообразования в требуемом формате:
        // Product: {Name}
        // Base Price: {BasePrice}
        // Tax (10%): {TaxAmount}
        // Total Price: {TotalPrice}
        // Discount ({percentage}%): {discountAmount}
        // Final Price: {finalPrice}
    }
}
quiz iconПроверьте себя

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

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