Delegate Classe
TOC
Comprimi il sommario
Espandi il sommario
Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Classe Delegate

 

Rappresenta un delegato, ossia la struttura di dati che fa riferimento a un metodo statico o ad un'istanza di classe e ad un metodo di istanza di quella classe.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)


[SerializableAttribute]
[ClassInterfaceAttribute(ClassInterfaceType.AutoDual)]
[ComVisibleAttribute(true)]
public abstract class Delegate : ICloneable, ISerializable

NomeDescrizione
System_CAPS_protmethodDelegate(Object, String)

Inizializza un delegato che richiama il metodo di istanza specificato nell'istanza di classe specificata.

System_CAPS_protmethodDelegate(Type, String)

Inizializza un delegato tramite cui viene richiamato il metodo statico specificato dalla classe specificata.

NomeDescrizione
System_CAPS_pubpropertyMethod

Ottiene il metodo rappresentato dal delegato.

System_CAPS_pubpropertyTarget

Ottiene l'istanza di classe sulla quale il metodo di istanza viene richiamato dal delegato corrente.

NomeDescrizione
System_CAPS_pubmethodClone()

Crea una copia superficiale del delegato.

System_CAPS_pubmethodSystem_CAPS_staticCombine(Delegate, Delegate)

Esegue la concatenazione degli elenchi chiamate di due delegati.

System_CAPS_pubmethodSystem_CAPS_staticCombine(Delegate[])

Esegue la concatenazione degli elenchi chiamate di una matrice di delegati.

System_CAPS_protmethodCombineImpl(Delegate)

Esegue la concatenazione degli elenchi chiamate dei delegati multicast o combinabili specificati e del delegato multicast o combinabile corrente.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, MethodInfo)

Crea un delegato del tipo specificato che rappresenta il metodo statico specificato.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, MethodInfo, Boolean)

Crea un delegato del tipo indicato per rappresentare il metodo statico specificato, in cui viene indicato anche il funzionamento in caso di errore di associazione.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Object, MethodInfo)

Crea un delegato del tipo specificato che rappresenta il metodo statico o il metodo di istanza indicato, con il primo argomento specificato.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Object, MethodInfo, Boolean)

Crea un delegato del tipo specificato che rappresenta il metodo statico o il metodo di istanza indicato, con il primo argomento specificato e il funzionamento indicato in caso di errore di associazione.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Object, String)

Crea un delegato del tipo specificato che rappresenta il metodo di istanza specificato per il richiamo dell'istanza di classe specificata.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Object, String, Boolean)

Crea un delegato del tipo specificato che rappresenta il metodo di istanza specificato, per il richiamo dell'istanza di classe specificata, con la distinzione tra maiuscole e minuscole specificata.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Object, String, Boolean, Boolean)

Crea un delegato del tipo specificato che rappresenta il metodo di istanza specificato, per il richiamo dell'istanza di classe specificata, con la distinzione tra maiuscole e minuscole specificata e il funzionamento specificato in caso di errore di associazione.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Type, String)

Crea un delegato del tipo specificato che rappresenta il metodo statico specificato della classe specificata.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Type, String, Boolean)

Crea un delegato del tipo indicato che rappresenta il metodo statico specificato della classe indicata, con la distinzione tra maiuscole e minuscole specificata.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Type, String, Boolean, Boolean)

Crea un delegato del tipo specificato che rappresenta il metodo statico indicato della classe specificata, con la distinzione tra maiuscole e minuscole indicata e il funzionamento specificato in caso di errore di associazione.

System_CAPS_pubmethodDynamicInvoke(Object[])

Richiama dinamicamente, ovvero ad associazione tardiva, il metodo rappresentato dal delegato corrente.

System_CAPS_protmethodDynamicInvokeImpl(Object[])

Richiama dinamicamente, ovvero ad associazione tardiva, il metodo rappresentato dal delegato corrente.

System_CAPS_pubmethodEquals(Object)

Determina se l'oggetto specificato e il delegato corrente sono dello stesso tipo e condividono gli stessi metodi e destinazioni e lo stesso elenco chiamate.(Esegue l'override di Object.Equals(Object).)

System_CAPS_protmethodFinalize()

Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulizia prima che l'oggetto stesso venga reclamato dalla procedura di Garbage Collection. (Ereditato da Object.)

System_CAPS_pubmethodGetHashCode()

Restituisce il codice hash per il delegato.(Esegue l'override di Object.GetHashCode().)

System_CAPS_pubmethodGetInvocationList()

Restituisce l'elenco chiamate del delegato.

System_CAPS_protmethodGetMethodImpl()

Ottiene il metodo static rappresentato dal delegato corrente.

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Non supportato.

System_CAPS_pubmethodGetType()

Ottiene l'oggetto Type dell'istanza corrente.(Ereditato da Object.)

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.(Ereditato da Object.)

System_CAPS_pubmethodSystem_CAPS_staticRemove(Delegate, Delegate)

Rimuove l'ultima occorrenza dell'elenco chiamate di un delegato dall'elenco chiamate di un altro delegato.

System_CAPS_pubmethodSystem_CAPS_staticRemoveAll(Delegate, Delegate)

Rimuove tutte le occorrenze dell'elenco chiamate di un delegato dall'elenco chiamate di un altro delegato.

System_CAPS_protmethodRemoveImpl(Delegate)

Rimuove l'elenco chiamate di un delegato dall'elenco chiamate di un altro delegato.

System_CAPS_pubmethodToString()

Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object.)

NomeDescrizione
System_CAPS_puboperatorSystem_CAPS_staticEquality(Delegate, Delegate)

Determina se i delegati specificati sono uguali.

System_CAPS_puboperatorSystem_CAPS_staticInequality(Delegate, Delegate)

Determina se i delegati specificati non sono uguali.

NomeDescrizione
System_CAPS_pubmethodGetMethodInfo()

Ottiene un oggetto che rappresenta il metodo rappresentato dal delegato specificato.(Definito da RuntimeReflectionExtensions.)

La Delegate classe è la classe base per i tipi delegati. Tuttavia, solo il sistema e i compilatori possono derivare in modo esplicito la Delegate classe o dal MulticastDelegate (classe). Non è inoltre possibile derivare un nuovo tipo da un tipo delegato. La Delegate classe non viene considerata un tipo delegato, ma è anche una classe utilizzata per derivare tipi delegati.

Implementano la maggior parte dei linguaggi un delegate (parola chiave) e i compilatori di tali linguaggi sono in grado di derivare dalla MulticastDelegate classe; pertanto, gli utenti devono utilizzare il delegate (parola chiave) fornito dal linguaggio.

System_CAPS_noteNota

Common language runtime fornisce un Invoke metodo per ogni tipo di delegato, con la stessa firma del delegato. Non è necessario chiamare questo metodo in modo esplicito da c#, Visual Basic o Visual C++, perché i compilatori chiamano automaticamente. Il Invoke metodo è utile in reflection quando si desidera trovare la firma del tipo di delegato.

Common language runtime fornisce ogni tipo di delegato con BeginInvoke e EndInvoke metodi, per abilitare la chiamata asincrona del delegato. Per ulteriori informazioni su tali metodi, vedere Calling Synchronous Methods Asynchronously.

La dichiarazione di un tipo delegato stabilisce un contratto che specifica la firma di uno o più metodi. Un delegato è un'istanza di un tipo delegato che contiene riferimenti a:

  • Un metodo di istanza di un tipo e un oggetto di destinazione può essere assegnato a tale tipo.

  • Un metodo di istanza di un tipo, con nascosto this parametro esposto nell'elenco di parametri formali. Il delegato da un delegato di istanza aperta.

  • Un metodo statico.

  • Un metodo statico e un oggetto di destinazione può essere assegnato al primo parametro del metodo. Il delegato in modo rigido al primo argomento.

Per ulteriori informazioni sull'associazione di delegati, vedere il CreateDelegate(Type, Object, MethodInfo, Boolean) overload del metodo.

System_CAPS_noteNota

Nelle versioni 1.0 e 1.1 di .NET Framework, un delegato può rappresentare un metodo solo se la firma del metodo corrisponde esattamente alla firma specificata dal tipo di delegato. Pertanto, è supportato solo il primo e terzo punto nell'elenco precedente e il primo punto richiede una corrispondenza esatta dei tipi.

Quando un delegato rappresenta un metodo di istanza chiuso al primo argomento (il caso più comune), viene archiviato un riferimento al punto di ingresso del metodo e un riferimento a un oggetto, la destinazione, ovvero di un tipo assegnabile al tipo definito il metodo chiamato. Quando un delegato rappresenta un metodo di istanza aperta, archivia un riferimento al punto di ingresso del metodo. La firma del delegato deve includere nascosto this parametro nell'elenco dei parametri formali; in questo caso, il delegato non dispone di un riferimento a un oggetto di destinazione e un oggetto di destinazione deve essere specificato quando viene richiamato il delegato.

Quando un delegato rappresenta un metodo statico, il delegato archivia un riferimento al punto di ingresso del metodo. Quando un delegato rappresenta un metodo statico chiuso al primo argomento, viene archiviato un riferimento al punto di ingresso del metodo e un riferimento a un oggetto di destinazione può essere assegnato al tipo del primo argomento del metodo. Quando il delegato viene richiamato, il primo argomento del metodo statico riceve l'oggetto di destinazione.

L'elenco chiamate di un delegato è un set ordinato di delegati in cui ogni elemento dell'elenco richiama esattamente uno dei metodi rappresentati dal delegato. Un elenco chiamate può contenere metodi duplicati. Durante una chiamata, i metodi vengono richiamati nell'ordine in cui compaiono nell'elenco chiamate. Un delegato tenta di richiamare qualsiasi metodo nel relativo elenco chiamate; i duplicati vengono richiamati una volta per ogni volta che vengono visualizzati nell'elenco chiamate. I delegati sono immutabili. una volta creato, non modifica l'elenco chiamate di un delegato.

Delegati sono definiti per il multicast o combinabili, poiché un delegato può richiamare uno o più metodi e può essere utilizzato in operazioni di combinazione.

La combinazione di operazioni, ad esempio Combine e Remove, delegati esistenti non verranno modificati. Al contrario, questa operazione restituisce un nuovo delegato che contiene i risultati dell'operazione, un delegato invariato o null. Un'operazione di combinazione restituisce null quando il risultato dell'operazione è un delegato che fa riferimento ad almeno un metodo. Quando l'operazione richiesta non ha alcun effetto, viene restituito un delegato invariato.

System_CAPS_noteNota

Linguaggi gestiti utilizzano il Combine e Remove metodi per implementare le operazioni di delegato. Gli esempi includono la AddHandler e RemoveHandler istruzioni in Visual Basic e gli operatori + = e -= in tipi delegati in c#.

A partire dal .NET Framework 4, tipi delegati generici possono presentare parametri di tipo variante. Parametri di tipo controvariante possono essere utilizzati come tipi di parametro del delegato e un parametro di tipo covariante può essere utilizzato come tipo restituito. Questa funzionalità consente di delegato generico tipi costruiti dalla stessa definizione di tipo generico per essere compatibili con l'assegnazione se i relativi argomenti di tipo sono tipi di riferimento con una relazione di ereditarietà, come spiegato Covarianza e controvarianza nei generics.

System_CAPS_noteNota

Delegati generici che sono compatibili con l'assegnazione a causa della varianza non sono necessariamente combinabili. Per essere combinabili, i tipi devono corrispondere esattamente. Ad esempio, si supponga che una classe denominata Derived è derivato da una classe denominata Base. Un delegato del tipo Action<Base> (Action(Of Base) in Visual Basic) può essere assegnato a una variabile di tipo Action<Derived>, ma non è possibile combinare due delegati perché i tipi non corrispondono esattamente.

Se un metodo richiamato genera un'eccezione, il metodo interrompe l'esecuzione, l'eccezione viene passata al chiamante del delegato e non vengono richiamati i metodi rimanenti nell'elenco chiamate. Intercettazione dell'eccezione nel chiamante non modificare questo comportamento.

Quando la firma dei metodi richiamati da un delegato include un valore restituito, il delegato restituisce il valore restituito dell'ultimo elemento nell'elenco chiamate. Quando la firma include un parametro che viene passato per riferimento, il valore finale del parametro è il risultato di ogni metodo nell'elenco di chiamate, l'esecuzione in sequenza e aggiornare il valore del parametro.

L'equivalente più vicino di un delegato in C o C++ è un puntatore a funzione. Un delegato può rappresentare un metodo statico o un metodo di istanza. Quando il delegato rappresenta un metodo di istanza, il delegato archivia non solo un riferimento al punto di ingresso del metodo, ma anche un riferimento all'istanza della classe. A differenza dei puntatori a funzione, i delegati sono orientati e indipendente dai tipi.

Nell'esempio seguente viene illustrato come definire un delegato denominato myMethodDelegate. Vengono create istanze di questo delegato per un metodo di istanza e un metodo statico di annidato mySampleClass (classe). Il delegato per il metodo di istanza richiede un'istanza di mySampleClass. Il mySampleClass istanza viene salvata in una variabile denominata mySC.

using System;
public class SamplesDelegate  {

   // Declares a delegate for a method that takes in an int and returns a String.
   public delegate String myMethodDelegate( int myInt );

   // Defines some methods to which the delegate can point.
   public class mySampleClass  {

      // Defines an instance method.
      public String myStringMethod ( int myInt )  {
         if ( myInt > 0 )
            return( "positive" );
         if ( myInt < 0 )
            return( "negative" );
         return ( "zero" );
      }

      // Defines a static method.
      public static String mySignMethod ( int myInt )  {
         if ( myInt > 0 )
            return( "+" );
         if ( myInt < 0 )
            return( "-" );
         return ( "" );
      }
   }

   public static void Main()  {

      // Creates one delegate for each method. For the instance method, an
      // instance (mySC) must be supplied. For the static method, use the
      // class name.
      mySampleClass mySC = new mySampleClass();
      myMethodDelegate myD1 = new myMethodDelegate( mySC.myStringMethod );
      myMethodDelegate myD2 = new myMethodDelegate( mySampleClass.mySignMethod );

      // Invokes the delegates.
      Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 5, myD1( 5 ), myD2( 5 ) );
      Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", -3, myD1( -3 ), myD2( -3 ) );
      Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 0, myD1( 0 ), myD2( 0 ) );
   }

}


/*
This code produces the following output:

5 is positive; use the sign "+".
-3 is negative; use the sign "-".
0 is zero; use the sign "".
*/ 

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1

I membri statici pubblici ( Condiviso in Visual Basic) di questo tipo è thread safe. Non tutti i membri di istanza sono garantiti come thread safe.

Torna all'inizio
Mostra:
© 2016 Microsoft