Delegati (Guida per programmatori C#)Delegates (C# Programming Guide)

Un delegate è un tipo che rappresenta riferimenti ai metodi con un elenco di parametri e un tipo restituito particolari.A delegate is a type that represents references to methods with a particular parameter list and return type. Quando si crea un'istanza di un delegato, è possibile associare l'istanza a qualsiasi metodo con una firma compatibile e un tipo restituito.When you instantiate a delegate, you can associate its instance with any method with a compatible signature and return type. Tramite l'istanza di delegato è possibile richiamare (o chiamare) il metodo.You can invoke (or call) the method through the delegate instance.

I delegati vengono utilizzati per passare metodi come argomenti ad altri metodi.Delegates are used to pass methods as arguments to other methods. I gestori di evento non sono altro che metodi richiamati tramite delegati.Event handlers are nothing more than methods that are invoked through delegates. Creare un metodo personalizzato e una classe, ad esempio un controllo Windows, che può chiamare tale metodo quando si verifica un determinato evento.You create a custom method, and a class such as a windows control can call your method when a certain event occurs. Nell'esempio che segue viene illustrata la dichiarazione di un delegato:The following example shows a delegate declaration:

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.Any method from any accessible class or struct that matches the delegate type can be assigned to the delegate. Il metodo può essere un metodo statico o di istanza.The method can be either static or an instance method. In questo modo è possibile modificare le chiamate ai metodi a livello di codice, nonché inserire nuovo codice nelle classi esistenti.This makes it possible to programmatically change method calls, and also plug new code into existing classes.

Nota

Nel contesto di overload dei metodi, la firma di un metodo non include il valore restituito,In the context of method overloading, the signature of a method does not include the return value. mentre nel contesto dei delegati, la firma include il valore restituito.But in the context of delegates, the signature does include the return value. In altre parole, un metodo deve restituire lo stesso tipo del delegato.In other words, a method must have the same return type as the delegate.

La possibilità di fare riferimento a un metodo come parametro rende i delegati ideali per la definizione di metodi di callback.This ability to refer to a method as a parameter makes delegates ideal for defining callback methods. È ad esempio possibile passare un riferimento a un metodo per il confronto di due oggetti passati come argomento a un algoritmo di ordinamento.For example, a reference to a method that compares two objects could be passed as an argument to a sort algorithm. Poiché il codice di confronto è in una routine separata, l'algoritmo di ordinamento può essere scritto in modo più generale.Because the comparison code is in a separate procedure, the sort algorithm can be written in a more general way.

Panoramica dei delegatiDelegates Overview

Di seguito sono riportate le proprietà dei delegati:Delegates have the following properties:

  • I delegati sono simili ai puntatori a funzione del linguaggio C++, ma sono interamente orientati agli oggetti e, a differenza dei puntatori C++ a funzioni membro, incapsulano sia un'istanza che un metodo dell'oggetto.Delegates are similar to C++ function pointers, but delegates are fully object-oriented, and unlike C++ pointers to member functions, delegates encapsulate both an object instance and a method.

  • Consentono di passare metodi come parametri.Delegates allow methods to be passed as parameters.

  • Possono essere utilizzati per definire metodi di callback.Delegates can be used to define callback methods.

  • Possono essere concatenati, ad esempio per chiamare più metodi su un singolo evento.Delegates can be chained together; for example, multiple methods can be called on a single event.

  • Non devono corrispondere necessariamente al tipo del delegato.Methods do not have to match the delegate type exactly. Per altre informazioni, vedere Uso della varianza nei delegati.For more information, see Using Variance in Delegates.

  • In C# versione 2.0 è stato introdotto il concetto di metodi anonimi, ovvero metodi che consentono di passare blocchi di codice come parametri in alternativa a un metodo definito separatamente.C# version 2.0 introduced the concept of anonymous methods, which allow code blocks to be passed as parameters in place of a separately defined method. In C# 3.0 sono state introdotte le espressioni lambda per scrivere in modo più conciso i blocchi di codice in linea.C# 3.0 introduced lambda expressions as a more concise way of writing inline code blocks. I metodi anonimi e le espressioni lambda vengono compilati, in determinati contesti, in tipi delegati.Both anonymous methods and lambda expressions (in certain contexts) are compiled to delegate types. Queste funzionalità sono ora note complessivamente come funzioni anonime.Together, these features are now known as anonymous functions. Per altre informazioni sulle espressioni lambda, vedere Espressioni lambda.For more information about lambda expressions, see Lambda expressions.

In questa sezioneIn This Section

Specifiche del linguaggio C#C# Language Specification

Per altre informazioni, vedere Delegati nella Specifica del linguaggio C#.For more information, see Delegates in the C# Language Specification. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.The language specification is the definitive source for C# syntax and usage.

Delegates, Events, and Lambda Expressions (Delegati, eventi ed espressioni Lambda) in C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers (Tutto su C# 3.0, terza edizione: più di 250 soluzioni per i programmatori C# 3.0)Delegates, Events, and Lambda Expressions in C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers

Delegates and Events (Delegati ed eventi) in Learning C# 3.0: Master the Fundamentals of C# 3.0 (Imparare C# 3.0: concetti di base di C# 3.0)Delegates and Events in Learning C# 3.0: Master the fundamentals of C# 3.0

Vedere ancheSee also