Назад к вопросам
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-модель.