Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto manualmente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale.
Traduzione
Originale

Delegati (Guida per programmatori C#)

Un delegato è un tipo che definisce una firma del metodo. Quando si crea un'istanza di un delegato, è possibile associare l'istanza a qualsiasi metodo con una firma compatibile. Tramite l'istanza di delegato è possibile invocare (o chiamare) il metodo.

I delegati vengono utilizzati per passare metodi come argomenti ad altri metodi. I gestori di evento non sono altro che metodi richiamati tramite delegati. Creare un metodo personalizzato e una classe, ad esempio un controllo Windows, può chiamare tale metodo quando si verifica un evento determinato. Nell'esempio che segue viene illustrata la dichiarazione di un delegato:


    public delegate int PerformCalculation(int x, int y);



È possibile assegnare al delegato qualsiasi metodo da tutte le classi o le strutture accessibili corrispondenti alla firma del delegato, costituita dal tipo e dai parametri restituiti. Il metodo può essere un metodo statico o di istanza. In questo modo è possibile modificare a livello di codice le chiamate ai metodi, nonché inserire nuovo codice nelle classi esistenti. Se si conosce la firma del delegato, è possibile assegnare un metodo personalizzato.

NotaNota

Nel contesto di overload dei metodi, la firma di un metodo non include il valore restituito, mentre nel contesto dei delegati, la firma include il valore restituito. In altre parole, un metodo deve restituire lo stesso valore del delegato.

La possibilità di fare riferimento a un metodo come parametro rende i delegati ideali per la definizione di metodi di callback. È ad esempio possibile passare un riferimento ad un metodo per il confronto di due oggetti come argomento ad un algoritmo di ordinamento. Poiché il codice di confronto è in una routine separata, l'algoritmo di ordinamento può essere scritto in modo più generale.

Di seguito sono riportate le caratteristiche principali dei delegati:

  • Sono simili ai puntatori a funzioni del linguaggio C++, ma sono indipendenti dai tipi.

  • Consentono di passare metodi come parametri.

  • Possono essere utilizzati per definire metodi di callback.

  • Possono essere concatenati, ad esempio per chiamare più metodi su un unico evento.

  • Non devono corrispondere necessariamente alla firma del delegato. Per ulteriori informazioni, vedere Utilizzo della varianza nei delegati (C# e Visual Basic).

  • In C# versione 2.0 è stato introdotto il concetto di metodi anonimi, che consentono di passare blocchi di codice come parametri anziché un metodo definito a parte. In C# 3.0 sono state introdotte le espressioni lambda per scrivere in modo più conciso i blocchi di codice in linea. I metodi anonimi e le espressioni lambda vengono, in determinati contesti, compilati in tipi delegati. Queste funzionalità sono ora note come funzioni anonime. Per ulteriori informazioni sulle espressioni lambda, vedere Funzioni anonime (Guida per programmatori C#).

Per ulteriori informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio è la fonte ufficiale per la sintassi e l'utilizzo di C#.

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2014 Microsoft