Sobes.tech
Junior

Какво може да съдържа делегат в C#?

sobes.tech AI

Отговор от 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);