Sobes.tech
Junior

Cosa può contenere un delegato in C#?

sobes.tech AI

Risposta dell'AI

Un delegato in C# è un tipo che rappresenta riferimenti a metodi con una firma specifica (tipo di ritorno e tipi di parametri). Può contenere:

  1. Riferimento a un metodo statico:
    // Metodo statico
    public static void StaticMethod(int x) { }
    
    // Delegato che fa riferimento a un metodo statico
    MyDelegate d = StaticMethod;
    
  2. Riferimento a un metodo di istanza:
    // Classe con metodo di istanza
    public class MyClass
    {
        public void InstanceMethod(int y) { }
    }
    
    // Creazione di un'istanza della classe
    MyClass obj = new MyClass();
    
    // Delegato che fa riferimento a un metodo di istanza
    MyDelegate d = obj.InstanceMethod;
    
  3. Lista di invocazione (invocation list) di più metodi: Un delegato in C# è in realtà multicanale. Può contenere riferimenti a più metodi. Quando viene chiamato, tutti i metodi nella lista vengono invocati nell'ordine di aggiunta.
    public delegate void MyDelegate(int value);
    
    public static void Method1(int z) { }
    public static void Method2(int w) { }
    
    // Creazione di un delegato multicanale
    MyDelegate multiDelegate = Method1;
    multiDelegate += Method2; // Aggiunta di un secondo metodo
    
    // Chiamata del delegato invoca entrambi i metodi
    multiDelegate(10);