Sobes.tech
Назад к вопросам
Junior — Middle
60

Объясните концепцию делегатов в языке C# и их основное назначение.

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Делегат в C# — это типобезопасная ссылка на метод. Его основное назначение — передавать поведение как параметр, чтобы код мог вызывать нужный метод без жесткой привязки к конкретной реализации. Часто используется для callback-ов, событий и обработки коллекций.

Определение:

Делегат — это объект, который хранит ссылку на метод с определённой сигнатурой: набором параметров и типом возвращаемого значения. Если сигнатура совпадает, в делегат можно назначить метод и потом вызывать его как обычную функцию.
Это позволяет отделять место вызова от конкретной реализации и делает код гибче.

Пример использования:

using System;

delegate int Operation(int a, int b);

class Program
{
    static int Add(int a, int b) => a + b;
    static int Multiply(int a, int b) => a * b;

    static void Main()
    {
        Operation op = Add;
        Console.WriteLine(op(2, 3)); // 5

        op = Multiply;
        Console.WriteLine(op(2, 3)); // 6
    }
}

Пояснение кода:

  • delegate int Operation(int a, int b); — объявляется тип делегата для методов, которые принимают два int и возвращают int.
  • op = Add; — в делегат записывается ссылка на метод Add.
  • op(2, 3) — вызов делегата эквивалентен вызову метода Add(2, 3).
  • Затем делегат переназначается на Multiply, и тот же код начинает вызывать другую реализацию.

Ключевые моменты:

  • Делегат — это типобезопасный аналог указателя на метод.
  • Сигнатура метода должна совпадать с сигнатурой делегата.
  • Делегаты позволяют передавать поведение как параметр.
  • Они лежат в основе событий в C#.
  • Делегаты удобны для callback-ов, сортировок, фильтрации и стратегий поведения.
  • Один делегат может ссылаться на несколько методов, если используется multicast-модель.