Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un delegato è un tipo che rappresenta i riferimenti ai metodi con uno specifico elenco di parametri e un tipo di ritorno. Quando si istanzia un delegato, è possibile associare l'istanza del delegato a qualsiasi metodo che abbia una firma e un tipo di ritorno compatibili. È possibile richiamare (o chiamare) il metodo tramite l'istanza del delegato.
I delegati vengono utilizzati per trasmettere metodi come argomenti ad altri metodi. I gestori di eventi sono essenzialmente metodi che si invocano tramite delegati. Quando si crea un metodo personalizzato, una classe come un controllo Windows può chiamare il metodo quando si verifica un determinato evento.
L'esempio seguente mostra una dichiarazione di delegato:
public delegate int PerformCalculation(int x, int y);
È possibile assegnare qualsiasi metodo da qualsiasi classe o struct accessibile che corrisponda al tipo delegato al delegato. Il metodo può essere statico o un metodo di istanza. La flessibilità consente di modificare le chiamate ai metodi a livello di codice o di inserire nuovo codice in classi esistenti.
Nota
Nel contesto dell'overload del metodo, la firma di un metodo non include il valore restituito. Tuttavia, nel contesto dei delegati, la firma include il valore restituito. In altre parole, un metodo deve avere un tipo di ritorno compatibile con il tipo di ritorno dichiarato dal delegato.
La possibilità di fare riferimento a un metodo come parametro rende i delegati ideali per la definizione dei metodi di callback. È possibile scrivere un metodo che confronta due oggetti nell'applicazione. Il metodo può quindi essere usato in un delegato per un algoritmo di ordinamento. Poiché il codice di confronto è separato dalla libreria, il metodo di ordinamento può essere più generale.
Puntatori di funzione supportano scenari simili in cui è necessario avere un maggiore controllo sulla convenzione di chiamata. Il codice associato a un delegato viene richiamato usando un metodo virtuale aggiunto a un tipo delegato. Quando si utilizzano puntatori a funzione, è possibile specificare convenzioni diverse.
Esplorare le caratteristiche del delegato
I delegati hanno le caratteristiche seguenti:
- I delegati consentono di passare i metodi come parametri.
- I delegati possono essere usati per definire i metodi di callback.
- I delegati possono essere concatenati, ad esempio per chiamare più metodi su un singolo evento.
- I metodi non devono corrispondere esattamente al tipo delegato. Per altre informazioni, vedere Utilizzo della varianza nei delegati.
- Le espressioni lambda sono un modo più conciso di scrivere blocchi di codice inline. Le espressioni lambda (in determinati contesti) vengono compilate in tipi delegati. Per altre informazioni sulle espressioni lambda, vedere espressioni lambda.
Esaminare gli articoli correlati
Per altre informazioni sui delegati, vedere gli articoli seguenti:
- Utilizzo dei delegati
- Delegati con metodi denominati e anonimi
- Uso della varianza nei delegati
- Come combinare delegati (delegati multicast)
- Come dichiarare, instanziare e usare un delegato
Accedere alla specifica del linguaggio C#
La specifica del linguaggio è l'origine definitiva per la sintassi e l'utilizzo di C#. Per altre informazioni, vedere Delegati nella specifica del linguaggio C# .