Sobes.tech
Junior

¿Qué puede contener un delegado en C#?

sobes.tech AI

Respuesta de la IA

Un delegado en C# es un tipo que representa referencias a métodos con una firma específica (tipo de retorno y tipos de parámetros). Puede contener:

  1. Referencia a un método estático:
    // Método estático
    public static void StaticMethod(int x) { }
    
    // Delegado que referencia un método estático
    MyDelegate d = StaticMethod;
    
  2. Referencia a un método de instancia:
    // Clase con método de instancia
    public class MyClass
    {
        public void InstanceMethod(int y) { }
    }
    
    // Creación de una instancia de la clase
    MyClass obj = new MyClass();
    
    // Delegado que referencia un método de instancia
    MyDelegate d = obj.InstanceMethod;
    
  3. Lista de invocación (invocation list) de varios métodos: Un delegado en C# es en realidad multicanal. Puede contener referencias a varios métodos. Cuando se llama a dicho delegado, se llaman todos los métodos en la lista en orden de adición.
    public delegate void MyDelegate(int value);
    
    public static void Method1(int z) { }
    public static void Method2(int w) { }
    
    // Creación de un delegado multicanal
    MyDelegate multiDelegate = Method1;
    multiDelegate += Method2; // Añadir un segundo método
    
    // Llamar al delegado invoca ambos métodos
    multiDelegate(10);