Qui spiegherò i delegati, i delegati multicast e il loro utilizzo. Il delegato è un tipo che contiene il riferimento ai metodi in un oggetto. Viene anche indicato come puntatore a funzione sicura di tipo. Possiamo dire che un delegato è un tipo che definisce una firma del metodo.
Quando si crea un'istanza di un delegato, è possibile associare la sua istanza a qualsiasi metodo con una firma compatibile. È possibile richiamare (o chiamare) il metodo tramite l'istanza delegata. I delegati vengono utilizzati per passare metodi come argomenti ad altri metodi. I gestori di eventi non sono altro che metodi che vengono invocati tramite delegati. I vantaggi dell'utilizzo dei delegati sono: Incapsulare la chiamata del metodo dal chiamante L'uso efficace del delegato migliora le prestazioni dell'applicazione Utilizzato per chiamare un metodo in modo asincrono. Ci sono alcune proprietà dei delegati
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.
delegato pubblico type_of_delegate delegate_name () // Dichiarazione
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.
L'esempio seguente mostra un'operazione delegata:
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();
}
}
}
Che cos'è il delegato multicast?
È un delegato che detiene il riferimento di più di un metodo. I delegati multicast devono contenere solo metodi che restituiscono null, altrimenti esiste un'eccezione di runtime.
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
}
}
Qui il delegato viene aggiunto usando l'operatore + = e rimosso usando l'operatore - =.
I tipi delegati derivano dalla classe Delegati in .NET Framework. I tipi delegati sono sigillati, non possono essere derivati. Poiché il delegato istanziato è un oggetto, può essere passato come parametro o assegnato a una proprietà. Ciò consente a un metodo di accettare un delegato come parametro e di chiamarlo in un secondo momento. Questo è noto come callback asincrono.