Sobes.tech
Junior

O que pode conter um delegado em C#?

sobes.tech IA

Resposta da IA

Um delegado em C# é um tipo que representa referências a métodos com uma assinatura específica (tipo de retorno e tipos de parâmetros). Pode conter:

  1. Referência a um método estático:
    // Método estático
    public static void StaticMethod(int x) { }
    
    // Delegado referenciando um método estático
    MyDelegate d = StaticMethod;
    
  2. Referência a um método de instância:
    // Classe com método de instância
    public class MyClass
    {
        public void InstanceMethod(int y) { }
    }
    
    // Criação de uma instância da classe
    MyClass obj = new MyClass();
    
    // Delegado referenciando um método de instância
    MyDelegate d = obj.InstanceMethod;
    
  3. Lista de invocação (invocation list) de vários métodos: Um delegado em C# é na verdade multicanal. Pode conter referências a vários métodos. Quando chamado, todos os métodos na lista são invocados na ordem de adição.
    public delegate void MyDelegate(int value);
    
    public static void Method1(int z) { }
    public static void Method2(int w) { }
    
    // Criação de um delegado multicanal
    MyDelegate multiDelegate = Method1;
    multiDelegate += Method2; // Adicionar um segundo método
    
    // Chamar o delegado invoca ambos os métodos
    multiDelegate(10);