Sobes.tech
Junior
144
questionbank

Что может содержать делегат в C#?

Answer from AI

sobes.tech AI

Делегат в C# — это тип, представляющий ссылки на методы с конкретной сигнатурой (возвращаемый тип и типы параметров). Он может содержать:

  1. Ссылку на статический метод:
    // Статический метод
    public static void StaticMethod(int x) { }
    
    // Делегат, ссылающийся на статический метод
    MyDelegate d = StaticMethod;
    
  2. Ссылку на метод экземпляра:
    // Класс с методом экземпляра
    public class MyClass
    {
        public void InstanceMethod(int y) { }
    }
    
    // Создание экземпляра класса
    MyClass obj = new MyClass();
    
    // Делегат, ссылающийся на метод экземпляра
    MyDelegate d = obj.InstanceMethod;
    
  3. Список вызовов (invocation list) из нескольких методов: Делегат в C# фактически является многоадресным. Он может содержать ссылки на несколько методов. При вызове такого делегата вызываются все методы в списке вызовов в порядке их добавления.
    public delegate void MyDelegate(int value);
    
    public static void Method1(int z) { }
    public static void Method2(int w) { }
    
    // Создание многоадресного делегата
    MyDelegate multiDelegate = Method1;
    multiDelegate += Method2; // Добавление второго метода
    
    // Вызов делегата вызывает оба метода
    multiDelegate(10);