Sobes.tech
Junior

Co może zawierać delegat w C#?

sobes.tech AI

Odpowiedź od AI

Delegat w C# to typ reprezentujący odwołania do metod o określonej sygnaturze (typ zwracany i typy parametrów). Może zawierać:

  1. Odwołanie do metody statycznej:
    // Metoda statyczna
    public static void StaticMethod(int x) { }
    
    // Delegat odwołujący się do metody statycznej
    MyDelegate d = StaticMethod;
    
  2. Odwołanie do metody instancji:
    // Klasa z metodą instancji
    public class MyClass
    {
        public void InstanceMethod(int y) { }
    }
    
    // Tworzenie instancji klasy
    MyClass obj = new MyClass();
    
    // Delegat odwołujący się do metody instancji
    MyDelegate d = obj.InstanceMethod;
    
  3. Lista wywołań (invocation list) wielu metod: Delegat w C# jest w rzeczywistości wieloadresowy. Może zawierać odwołania do kilku metod. Przy wywołaniu takiego delegata, wywoływane są wszystkie metody na liście w kolejności ich dodania.
    public delegate void MyDelegate(int value);
    
    public static void Method1(int z) { }
    public static void Method2(int w) { }
    
    // Tworzenie wieloadresowego delegata
    MyDelegate multiDelegate = Method1;
    multiDelegate += Method2; // Dodanie drugiej metody
    
    // Wywołanie delegata wywołuje obie metody
    multiDelegate(10);