using System;
namespace Articulos.Cap04
{
// Clase con métodos de instancia:
internal class ClaseDemo
{
public void Metodo1(int a)
{
Console.WriteLine("`Metodo1`. Valor de `a`: {0}", a.ToString());
}
public void Metodo2(int a)
{
Console.WriteLine("`Metodo2`. Valor de `a`: {0}", a.ToString());
}
}
// Delegado con firma:
// Retorno: void, Parámetros: int:
public delegate void Delegado(int param);
internal class EjemploMulticasting
{
public static void Main()
{
ClaseDemo cd = new ClaseDemo();
// Creación de 3 instancias de `Delegado`.
// A cada una se le asigna métodos compatibles:
Delegado del1 = cd.Metodo1;
Delegado del2 = cd.Metodo2;
Delegado del3 = Metodo3;
//Creación de delegado con multicasting:
Delegado conjuntoMetodos = del1 + del2;
conjuntoMetodos += del3;
conjuntoMetodos(5);
}
public static void Metodo3(int a)
{
Console.WriteLine("`Metodo3`. Valor de `a`: {0}", a.ToString());
}
}
}
dXNpbmcgU3lzdGVtOwoKbmFtZXNwYWNlIEFydGljdWxvcy5DYXAwNAp7CiAgICAvLyBDbGFzZSBjb24gbcOpdG9kb3MgZGUgaW5zdGFuY2lhOgogICAgaW50ZXJuYWwgY2xhc3MgQ2xhc2VEZW1vCiAgICB7CiAgICAgICAgcHVibGljIHZvaWQgTWV0b2RvMShpbnQgYSkKICAgICAgICB7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJgTWV0b2RvMWAuIFZhbG9yIGRlIGBhYDogezB9IiwgYS5Ub1N0cmluZygpKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcHVibGljIHZvaWQgTWV0b2RvMihpbnQgYSkKICAgICAgICB7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJgTWV0b2RvMmAuIFZhbG9yIGRlIGBhYDogezB9IiwgYS5Ub1N0cmluZygpKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8vIERlbGVnYWRvIGNvbiBmaXJtYTogCiAgICAvLyBSZXRvcm5vOiB2b2lkLCBQYXLDoW1ldHJvczogaW50OgogICAgcHVibGljIGRlbGVnYXRlIHZvaWQgRGVsZWdhZG8oaW50IHBhcmFtKTsKICAgIAogICAgaW50ZXJuYWwgY2xhc3MgRWplbXBsb011bHRpY2FzdGluZwogICAgewogICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgICAgICB7CiAgICAgICAgICAgIENsYXNlRGVtbyBjZCA9IG5ldyBDbGFzZURlbW8oKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIENyZWFjacOzbiBkZSAzIGluc3RhbmNpYXMgZGUgYERlbGVnYWRvYC4KICAgICAgICAgICAgLy8gQSBjYWRhIHVuYSBzZSBsZSBhc2lnbmEgbcOpdG9kb3MgY29tcGF0aWJsZXM6CiAgICAgICAgICAgIERlbGVnYWRvIGRlbDEgPSBjZC5NZXRvZG8xOwogICAgICAgICAgICBEZWxlZ2FkbyBkZWwyID0gY2QuTWV0b2RvMjsKICAgICAgICAgICAgRGVsZWdhZG8gZGVsMyA9IE1ldG9kbzM7CiAgICAgICAgICAgIAogICAgICAgICAgICAvL0NyZWFjacOzbiBkZSBkZWxlZ2FkbyBjb24gbXVsdGljYXN0aW5nOgogICAgICAgICAgICBEZWxlZ2FkbyBjb25qdW50b01ldG9kb3MgPSBkZWwxICsgZGVsMjsKICAgICAgICAgICAgY29uanVudG9NZXRvZG9zICs9IGRlbDM7CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25qdW50b01ldG9kb3MoNSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNZXRvZG8zKGludCBhKQogICAgICAgIHsKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoImBNZXRvZG8zYC4gVmFsb3IgZGUgYGFgOiB7MH0iLCBhLlRvU3RyaW5nKCkpOwogICAgICAgIH0KICAgIH0KfQ==