C sharp/Delegati ed eventi
Un delegato può essere pensato come l'analogo del puntatore a funzioni del C, ma type safe, ovvero la cui coerenza viene controllata dal compilatore[1].
Tale tipizzazione è determinata dalla firma del metodo del delegato. I delegati permettono di passare i metodi come parametri, definire metodi di callback ed essere collegati in cascata, cioè uno stesso evento può richiamare più metodi.
Un esempio di dichiarazione di un delegato potrebbe essere:
public delegate int CalcolaSomma( int x, int y );
Il programmatore può quindi usare qualunque metodo, specificato in strutture o classi visibili la cui firma corrisponde a quella del delegato, come funzione delegata ad essere eseguita. Il metodo può essere statico o di istanza[2].
Attualmente, usando C#, la corrispondenza tra firme gode di due livelli di flessibilità dovuti ai concetti di controvarianza e covarianza. La controvarianza permette di invocare un delegato passando un parametro il cui tipo è meno specifico (secondo la gerarchia di ereditarietà di C#) di quello del delegato. Per esempio, se il parametro nella firma del delegato è definito come int, si può passare un meno specializzato parametro object.
Con la covarianza invece è possibile usare un metodo della funzione specificata come delegata di tipo più specifico di quello restituito dal delegato, secondo la sua firma. per esempio un metodo che ritorna una stringa può essere l'implementazione di un delegato che secondo la sua firma deve restituire un object.
Note
modifica- ↑ Delegates (C# Programming Guide), su msdn.microsoft.com, Microsoft.
- ↑ Using Delegates (C# Programming Guide), su msdn.microsoft.com, Microsoft.