Aquí voy a explicar delegados, delegados de multidifusión y su uso. Delegado es un tipo que contiene la referencia de método (s) en un objeto. También se conoce como puntero de función de tipo seguro. Podemos decir que un delegado es un tipo que define la firma de un método.
Cuando crea una instancia de un delegado, puede asociar su instancia con cualquier método con una firma compatible. Puede invocar (o llamar) el método a través de la instancia de delegado. Los delegados se utilizan para pasar métodos como argumentos a otros métodos. Los controladores de eventos no son más que métodos que se invocan a través de delegados. Las ventajas de usar delegados son: encapsular la llamada del método de la persona que llama. El uso efectivo del delegado mejora el rendimiento de la aplicación. Se usa para llamar a un método de forma asincrónica. Hay algunas propiedades de los delegados son
Delegates are like C++ function pointers but are type safe.
Delegates allow methods to be passed as parameters.
Delegates can be used to define callback methods.
Delegates can be chained together; for example, multiple methods can be called on a single event.
Methods do not have to match the delegate signature exactly.
delegado público type_of_delegate delegate_name () // Declaración
You can use delegates without parameters or with parameter list
If you are referring to the method with some data type then the delegate which you are declaring should be in the same format. This is why it is referred to as type safe function pointer. Here I am giving an example with String.
El siguiente ejemplo muestra una operación de delegado:
namespace MyDelegate
{
class Program
{
private delegate void Show(string s);
// Create a method for a delegate.
public static void MyDelegateMethod(string me
ssage)
{
System.Console.WriteLine(message);
}
static void Main(string[] args)
{
Show p = MyDelegateMethod;
p("My Delegate");
p.Invoke("My Delegate");
System.Console.ReadLine();
}
}
}
¿Qué es el delegado de multidifusión?
Es un delegado que tiene la referencia de más de un método. Los delegados de multidifusión solo deben contener métodos que devuelvan nulo; de lo contrario, hay una excepción en tiempo de ejecución.
delegate void MyMulticastDelegate(int i, string s);
Class Class2
{
static void MyFirstDelegateMethod(int i, string s)
{
Console.WriteLine("My First Method");
}
static void MySecondDelegateMethod(int i, string s)
{
Console.WriteLine("My Second Method");
}
static void Main(string[] args)
{
MyMulticastDelegate Method= new MyMulticastDelegate(MyFirstDelegateMethod);
Method+= new MyMulticastDelegate (MySecondDelegateMethod);
Method(1,"Hi"); // Calling 2 Methodscalled
Method-= new MyMulticastDelegate (MyFirstDelegateMethod);
Method(2,"Hi"); //Only 2nd Method calling
}
}
Aquí Delegado se agrega usando el operador + = y se elimina usando el operador - =.
Los tipos de delegado se derivan de la clase Delegado en .NET Framework. Los tipos de delegado están sellados; no se pueden derivar. Debido a que el delegado instanciado es un objeto, puede pasarse como un parámetro o asignarse a una propiedad. Esto permite que un método acepte un delegado como parámetro y llame al delegado en algún momento posterior. Esto se conoce como una devolución de llamada asincrónica.