Sobes.tech
Junior

Ką gali turėti delegatas C#?

sobes.tech AI

Atsakymas iš AI

C# kalboje delegatas yra tipas, kuris atstovauja nuorodoms į metodus su konkrečia signatūra (grąžinamojo tipo ir parametrų tipų). Jis gali turėti:

  1. Nuorodą į statinį metodą:
    // Statinis metodas
    public static void StaticMethod(int x) { }
    
    // Delegatas, nuoroda į statinį metodą
    MyDelegate d = StaticMethod;
    
  2. Nuorodą į instancijos metodą:
    // Klasė su instancijos metodu
    public class MyClass
    {
        public void InstanceMethod(int y) { }
    }
    
    // Klasės instancijos sukūrimas
    MyClass obj = new MyClass();
    
    // Delegatas, nuoroda į instancijos metodą
    MyDelegate d = obj.InstanceMethod;
    
  3. Kelių metodų iškvietimo sąrašas (invocation list): C# delegatas iš tikrųjų yra daugiašakis. Jis gali turėti nuorodų į kelis metodus. Kai toks delegatas kviečiamas, iškviečiami visi sąrašo metodai pagal jų pridėjimo tvarką.
    public delegate void MyDelegate(int value);
    
    public static void Method1(int z) { }
    public static void Method2(int w) { }
    
    // Daugiašakio delegato sukūrimas
    MyDelegate multiDelegate = Method1;
    multiDelegate += Method2; // Pridėti antrą metodą
    
    // Delegato iškvietimas iškviečia abu metodus
    multiDelegate(10);