TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #2012 1.81K
День 1658. #ВопросыНаСобеседовании
Самые часто задаваемые вопросы на собеседовании по C#

20. Какие типы делегатов существуют в C#?

Делегаты в C# можно разделить на три основных типа:
1) Обычные
Ссылаются на один метод с соответствующей сигнатурой. Когда делегат вызывается, он вызывает указанный метод.
public delegate void DisplayMessage(string message);

DisplayMessage display = ShowMessage;
display("Hello, delegate!");

void ShowMessage(string message)
=> Console.WriteLine(message);

2) Многоадресные (Multicast)
Могут ссылаться на несколько методов с совпадающей сигнатурой. Когда делегат вызывается, он вызывает все указанные методы в том порядке, в котором они были добавлены. Многоадресные делегаты создаются из обычных с помощью операторов += или -=.
DisplayMessage display = ShowMessage1;
display += ShowMessage2;
display("Hello, Multicast delegate!");

void ShowMessage1(string msg)
=> Console.WriteLine($"Message 1: {msg}");
void ShowMessage2(string msg)
=> Console.WriteLine($"Message 2: {msg}");

3) Обобщённые
Используют параметры типа, что позволяет им работать с несколькими типами без приведения или упаковки/распаковки. C# предоставляет три встроенных обобщённых делегата: Func, Action и Predicate.
- Func<TResult>: представляет функцию с возвращаемым типом.
- Action: представляет метод, возвращающий void, без параметров.
- Predicate<T>: представляет метод, который принимает входной параметр и возвращает логическое значение.
Func и Action имеют перегрузки, принимающие большее количество аргументов.

Func<int, int, int> add = 
(x, y) => x + y;
int sum = add(10, 20);

Action<string> display =
msg => Console.WriteLine(msg);
display($"Sum: {sum}");

Predicate<string> startsWithHello =
x => x.StartsWith("Hello, ");
bool checkHello = startsWithHello("Hello, delegate");

См. также:
- Управление цепочками делегатов
- Анонимные методы
- Лямбда-выражения

Источник: https://dev.to/bytehide/20-c-interview-questions-for-experienced-2023-1hl6
  • 👍 28
More from @netdeveloperdiary
  1. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
  2. Oct 9, 2026День 2809. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Окончание Начало 3.…
  3. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  4. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
  5. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  6. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →