0Pricing
C# Academy · Урок

Члены с телом-выражением

Пишите компактные свойства и методы.

«Члены с телом-выражением» — бесплатный урок C# Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.

Более краткий синтаксис

Синтаксис с телом-выражением использует =>, чтобы определить член как одно выражение вместо полного тела { ... }. Он делает короткие члены компактными и понятными.

using System;

class Greeter
{
    public string Hello() => "Hi there!";
}

class Program
{
    static void Main()
    {
        var g = new Greeter();
        Console.WriteLine(g.Hello());
    }
}

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

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

using System;

class MathHelper
{
    public int Square(int x) => x * x;
    public int Add(int a, int b) => a + b;
}

class Program
{
    static void Main()
    {
        var m = new MathHelper();
        Console.WriteLine(m.Square(6));
        Console.WriteLine(m.Add(3, 4));
    }
}

Свойства только для чтения с телом-выражением

Вычисляемое свойство только для чтения может использовать => вместо get { return ...; }.

using System;

class Rectangle
{
    public double Width { get; set; }
    public double Height { get; set; }
    public double Area => Width * Height;
}

class Program
{
    static void Main()
    {
        var r = new Rectangle { Width = 4, Height = 5 };
        Console.WriteLine("Area: " + r.Area);
    }
}

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

Методам доступа get и set также можно задать собственные тела-выражения, что удобно при использовании резервного поля.

using System;

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

class Program
{
    static void Main()
    {
        var p = new Person();
        p.Name = "  Niki  ";
        Console.WriteLine("[" + p.Name + "]");
    }
}

Возврат вычисляемых строк

Синтаксис с телом-выражением особенно удобен для форматированных производных значений, таких как полные имена или подписи.

using System;

class Customer
{
    public string First { get; set; }
    public string Last { get; set; }
    public string Display => First + " " + Last;
}

class Program
{
    static void Main()
    {
        var c = new Customer { First = "Ada", Last = "Lovelace" };
        Console.WriteLine(c.Display);
    }
}

Тело-выражение с условиями

Одно выражение может включать условный (тернарный) оператор, позволяя разместить логику ветвления в одной строке.

using System;

class Account
{
    public decimal Balance { get; set; }
    public string Status => Balance >= 0 ? "OK" : "Overdrawn";
}

class Program
{
    static void Main()
    {
        var a = new Account { Balance = -20m };
        Console.WriteLine(a.Status);
    }
}

Методы без возвращаемого значения с телом-выражением

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

using System;

class Logger
{
    public void Log(string msg) => Console.WriteLine("[LOG] " + msg);
}

class Program
{
    static void Main()
    {
        var log = new Logger();
        log.Log("Started");
    }
}

Конструкторы с телом-выражением

В конструкторе с одним присваиванием также можно использовать синтаксис со стрелкой.

using System;

class Point
{
    public int X { get; }
    public Point(int x) => X = x;
}

class Program
{
    static void Main()
    {
        var p = new Point(7);
        Console.WriteLine("X = " + p.X);
    }
}

Когда НЕ следует его использовать

Тела-выражения предназначены только для одного выражения. Если Вам нужны несколько операторов, циклы или ветвления для проверки, используйте обычное блочное тело.

using System;

class Calculator
{
    // Single expression -> arrow is fine
    public int Triple(int n) => n * 3;

    // Multiple statements -> use a block
    public int SumTo(int n)
    {
        int total = 0;
        for (int i = 1; i <= n; i++) total += i;
        return total;
    }
}

class Program
{
    static void Main()
    {
        var c = new Calculator();
        Console.WriteLine(c.Triple(4));
        Console.WriteLine(c.SumTo(5));
    }
}

Сочетание нескольких вариантов в одном классе

Небольшой класс может использовать синтаксис со стрелкой почти для каждого члена, значительно сокращая шаблонный код.

using System;

class Temperature
{
    public double Celsius { get; set; }
    public double Fahrenheit => Celsius * 9 / 5 + 32;
    public double Kelvin => Celsius + 273.15;
    public override string ToString() => Celsius + "C";
}

class Program
{
    static void Main()
    {
        var t = new Temperature { Celsius = 25 };
        Console.WriteLine(t + " = " + t.Fahrenheit + "F = " + t.Kelvin + "K");
    }
}

Объединение всего изученного

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

using System;

class Order
{
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal Total => Quantity * UnitPrice;
    public bool IsLarge => Quantity > 10;
}

class Program
{
    static void Main()
    {
        var o = new Order { Quantity = 12, UnitPrice = 9.99m };
        Console.WriteLine("Total: " + o.Total + ", Large: " + o.IsLarge);
    }
}

Быстрая проверка

Проверьте, насколько хорошо Вы поняли члены с телом-выражением.

Итоги

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

using System;

class Demo
{
    public int N { get; set; }
    public int Doubled => N * 2;
    public string Label() => "N is " + N;
}

class Program
{
    static void Main()
    {
        var d = new Demo { N = 9 };
        Console.WriteLine(d.Label() + ", doubled = " + d.Doubled);
    }
}

Часто задаваемые вопросы

Урок «Члены с телом-выражением» бесплатный?

Да — полный текст урока «Члены с телом-выражением» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.

Чему я научусь в уроке «Члены с телом-выражением»?

Пишите компактные свойства и методы. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Члены с телом-выражением»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Автоматически реализуемые свойства
  2. Полные свойства с резервными полями
  3. Члены с телом-выражением
  4. Индексаторы
← Назад к C# Academy