Elementor Header #8

34. Цепочки вызовов методов

34. Цепочки вызовов методов в C#

1. Введение

Цепочки вызовов методов (Method Chaining) – это способ вызова нескольких методов подряд в одной строке. Такой стиль программирования делает код более читаемым и лаконичным.

📌 Пример:

				
					string result = "hello"
    .ToUpper()
    .Replace("HELLO", "WORLD")
    .Insert(0, "Say: ");

Console.WriteLine(result); // Выведет "Say: WORLD"

				
			

🔹 В этом примере вызовы ToUpper(), Replace() и Insert() объединены в одну цепочку.


2. Как работают цепочки вызовов?

Метод A().B().C() работает, если каждый метод возвращает объект, у которого можно вызвать следующий метод.

📌 Пример с StringBuilder:

				
					using System;
using System.Text;

class Program
{
    static void Main()
    {
        StringBuilder sb = new StringBuilder("Привет");
        sb.Append(", мир!").Replace("мир", "C#").Append(" :)");

        Console.WriteLine(sb); // Выведет "Привет, C#! :)"
    }
}

				
			

🔹 Append() и Replace() возвращают тот же объект StringBuilder, что позволяет продолжать цепочку.


3. Создание цепочек вызовов в своих классах

Чтобы реализовать method chaining в собственных классах, методы должны возвращать this (текущий объект).

📌 Пример:

				
					class Person
{
    private string name;
    private int age;

    public Person SetName(string name)
    {
        this.name = name;
        return this; // Возвращаем текущий объект
    }

    public Person SetAge(int age)
    {
        this.age = age;
        return this;
    }

    public void PrintInfo()
    {
        Console.WriteLine($"Имя: {name}, Возраст: {age}");
    }
}

class Program
{
    static void Main()
    {
        Person person = new Person()
            .SetName("Максим")
            .SetAge(25);

        person.PrintInfo(); // Выведет "Имя: Максим, Возраст: 25"
    }
}

				
			

🔹 Методы SetName() и SetAge() возвращают this, позволяя вызывать их в цепочке.


4. Использование цепочек вызовов с LINQ

Цепочки вызовов широко применяются в LINQ.

📌 Пример:

				
					using System;
using System.Linq;

class Program
{
    static void Main()
    {
        int[] numbers = { 1, 2, 3, 4, 5 };

        var result = numbers
            .Where(n => n % 2 == 0)  // Оставляем только четные
            .Select(n => n * n)      // Возводим в квадрат
            .ToList();               // Преобразуем в список

        Console.WriteLine(string.Join(", ", result)); // Выведет "4, 16"
    }
}

				
			

🔹 Where() фильтрует массив, Select() изменяет значения, ToList() создаёт список.

Заключение

Цепочки вызовов позволяют вызывать несколько методов в одной строке, улучшая читаемость кода.
Работает, если методы возвращают объект, у которого можно вызвать следующий метод.
Применяется в LINQ, StringBuilder и при проектировании собственных классов.

🚀 Теперь вы умеете использовать method chaining в C#!

Тестовое задание

  1. Создайте класс Car с методами SetBrand(string), SetModel(string), SetYear(int), возвращающими this.
  2. В Main() создайте объект Car и установите параметры, используя цепочку вызовов.
  3. Выведите информацию о машине.

📌 Пример решения:

				
					class Car
{
    private string brand;
    private string model;
    private int year;

    public Car SetBrand(string brand)
    {
        this.brand = brand;
        return this;
    }

    public Car SetModel(string model)
    {
        this.model = model;
        return this;
    }

    public Car SetYear(int year)
    {
        this.year = year;
        return this;
    }

    public void PrintInfo()
    {
        Console.WriteLine($"Марка: {brand}, Модель: {model}, Год: {year}");
    }
}

class Program
{
    static void Main()
    {
        Car myCar = new Car()
            .SetBrand("Toyota")
            .SetModel("Camry")
            .SetYear(2022);

        myCar.PrintInfo(); // Выведет "Марка: Toyota, Модель: Camry, Год: 2022"
    }
}

				
			

Попробуйте написать и запустить этот код, чтобы убедиться в правильности выполнения операций и особенностях работы с числами с плавающей точкой.

logo