Sobes.tech
Junior

Τι μπορεί να περιέχει ένας delegate σε C#;

sobes.tech AI

Απάντηση από AI

Ένας delegate στην C# είναι ένας τύπος που αντιπροσωπεύει αναφορές σε μεθόδους με μια συγκεκριμένη υπογραφή (τύπο επιστροφής και τύπους παραμέτρων). Μπορεί να περιέχει:

  1. Αναφορά σε μια στατική μέθοδο:
    // Στατική μέθοδος
    public static void StaticMethod(int x) { }
    
    // Delegate που αναφέρεται σε μια στατική μέθοδο
    MyDelegate d = StaticMethod;
    
  2. Αναφορά σε μια μέθοδο στιγμιότυπου (instance):
    // Κλάση με μέθοδο στιγμιότυπου
    public class MyClass
    {
        public void InstanceMethod(int y) { }
    }
    
    // Δημιουργία στιγμιότυπου της κλάσης
    MyClass obj = new MyClass();
    
    // Delegate που αναφέρεται σε μια μέθοδο στιγμιότυπου
    MyDelegate d = obj.InstanceMethod;
    
  3. Λίστα κλήσεων (invocation list) πολλών μεθόδων: Ένας delegate στην C# είναι στην πραγματικότητα πολυκαναλικός. Μπορεί να περιέχει αναφορές σε πολλές μεθόδους. Όταν καλείται, καλούνται όλες οι μέθοδοι στη λίστα με τη σειρά που προστέθηκαν.
    public delegate void MyDelegate(int value);
    
    public static void Method1(int z) { }
    public static void Method2(int w) { }
    
    // Δημιουργία πολυκαναλικού delegate
    MyDelegate multiDelegate = Method1;
    multiDelegate += Method2; // Προσθήκη μιας δεύτερης μεθόδου
    
    // Κλήση του delegate καλεί και τις δύο μεθόδους
    multiDelegate(10);