Aqui eu vou explicar delegados, delegados multicast e seu uso. Delegate é um tipo que contém a referência dos métodos em um objeto. Também é referido como um ponteiro de função de segurança de tipo. Podemos dizer que um delegado é um tipo que define uma assinatura de método.
Ao instanciar um delegado, você pode associar sua instância a qualquer método com uma assinatura compatível. Você pode invocar (ou chamar) o método através da instância delegada. Delegados são usados para passar métodos como argumentos para outros métodos. Os manipuladores de eventos nada mais são do que métodos chamados por meio de delegados. As vantagens do uso de delegados são: Encapsular a chamada do método do chamador O uso efetivo do delegado melhora o desempenho do aplicativo Usado para chamar um método de forma assíncrona. Existem algumas propriedades dos delegados que são
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 () // Declaration
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.
O exemplo a seguir mostra uma operação de delegação:
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();
}
}
}
O que é o delegado de difusão seletiva?
É um delegado que mantém a referência de mais de um método. Delegados de difusão seletiva devem conter apenas métodos que retornem nulos, caso contrário, há uma exceção em tempo de execução.
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
}
}
Aqui, o Delegado é adicionado usando o operador + = e removido usando o operador - =.
Tipos de delegado são derivados da classe Delegate no .NET Framework. Tipos de delegados são selados - eles não podem ser derivados. Como o delegado instanciado é um objeto, ele pode ser passado como parâmetro ou atribuído a uma propriedade. Isso permite que um método aceite um delegado como parâmetro e chame o delegado posteriormente. Isso é conhecido como retorno de chamada assíncrono.