Condividi tramite


Delegati (Guida per programmatori C#)

Delegato è un tipo che rappresenta riferimenti ai metodi con un elenco di parametri e un tipo restituito particolari. Quando si crea un'istanza di un delegato, è possibile associare l'istanza a qualsiasi metodo con una firma compatibile e un tipo restituito. Tramite l'istanza di delegato è possibile richiamare (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, che può chiamare tale metodo quando si verifica un determinato evento. Nell'esempio che segue viene illustrata la dichiarazione di un delegato:

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

Qualsiasi metodo di qualsiasi classe o struct accessibile che corrisponde al tipo di delegato può essere assegnato al delegato. Il metodo può essere un metodo statico o di istanza. In questo modo è possibile modificare le chiamate ai metodi a livello di codice, nonché inserire nuovo codice nelle classi esistenti.

Nota

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 tipo 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 a un metodo per il confronto di due oggetti passati come argomento a un algoritmo di ordinamento. Poiché il codice di confronto è in una routine separata, l'algoritmo di ordinamento può essere scritto in modo più generale.

Panoramica dei delegati

Di seguito sono riportate le proprietà dei delegati:

  • Sono simili ai puntatori a funzione 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 singolo evento.

  • Non devono corrispondere necessariamente al tipo 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 compilati, in determinati contesti, in tipi delegati. Queste funzionalità sono ora note complessivamente come funzioni anonime. Per ulteriori informazioni sulle espressioni lambda, vedere Funzioni anonime (Guida per programmatori C#).

Argomenti della sezione

Specifiche del linguaggio C#

Per altre informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.

Capitoli del libro rappresentati

Delegates, Events, and Lambda Expressions in C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers

Delegates and Events in Learning C# 3.0: Master the fundamentals of C# 3.0

Vedere anche

Riferimenti

Eventi (Guida per programmatori C#)

Delegate

Concetti

Guida per programmatori C#