Delegate Classe

Définition

Représente un délégué, lequel est une structure de données qui fait référence à une méthode statique ou à une instance de classe et à une méthode d'instance de cette classe.

public ref class Delegate abstract
public ref class Delegate abstract : ICloneable, System::Runtime::Serialization::ISerializable
public abstract class Delegate
public abstract class Delegate : ICloneable, System.Runtime.Serialization.ISerializable
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)]
[System.Serializable]
public abstract class Delegate : ICloneable, System.Runtime.Serialization.ISerializable
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Delegate : ICloneable, System.Runtime.Serialization.ISerializable
type Delegate = class
type Delegate = class
    interface ICloneable
    interface ISerializable
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)>]
[<System.Serializable>]
type Delegate = class
    interface ICloneable
    interface ISerializable
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Delegate = class
    interface ICloneable
    interface ISerializable
Public MustInherit Class Delegate
Public MustInherit Class Delegate
Implements ICloneable, ISerializable
Héritage
Delegate
Dérivé
Attributs
Implémente

Remarques

La Delegate classe est la classe de base pour les types délégués. Toutefois, seuls le système et les compilateurs peuvent dériver explicitement de la Delegate classe ou de la MulticastDelegate classe . Il n’est pas non plus permis de dériver un nouveau type à partir d’un type délégué. La Delegate classe n’est pas considérée comme un type délégué ; il s’agit d’une classe utilisée pour dériver les types délégués.

La plupart des langages implémentent un delegate mot clé, et les compilateurs pour ces langues peuvent dériver de la MulticastDelegate classe ; par conséquent, les utilisateurs doivent utiliser les delegate mot clé fournies par la langue.

Notes

Le Common Language Runtime fournit une Invoke méthode pour chaque type de délégué, avec la même signature que le délégué. Vous n’avez pas besoin d’appeler cette méthode explicitement à partir de C#, Visual Basic ou Visual C++, car les compilateurs l’appellent automatiquement. La Invoke méthode est utile dans la réflexion lorsque vous souhaitez trouver la signature du type délégué.

Le Common Language Runtime fournit à chaque type de délégué des BeginInvoke méthodes et EndInvoke pour activer l’appel asynchrone du délégué. Pour plus d’informations sur ces méthodes, consultez Appel de méthodes synchrones de manière asynchrone.

La déclaration d’un type délégué établit un contrat qui spécifie la signature d’une ou plusieurs méthodes. Un délégué est un instance d’un type délégué qui a des références à :

  • Une méthode instance d’un type et un objet cible assignable à ce type.

  • Une méthode instance d’un type, avec le paramètre masqué this exposé dans la liste des paramètres formels. Le délégué est considéré comme un délégué ouvert instance.

  • Méthode statique.

  • Méthode statique et objet cible assignable au premier paramètre de la méthode. Le délégué est dit fermé sur son premier argument.

Pour plus d’informations sur la liaison de délégué, consultez la surcharge de CreateDelegate(Type, Object, MethodInfo, Boolean) méthode.

Lorsqu’un délégué représente une méthode instance fermée sur son premier argument (cas le plus courant), le délégué stocke une référence au point d’entrée de la méthode et une référence à un objet, appelé cible, qui est d’un type assignable au type qui a défini la méthode. Lorsqu’un délégué représente une méthode instance ouverte, il stocke une référence au point d’entrée de la méthode. La signature du délégué doit inclure le paramètre masqué this dans sa liste de paramètres formelle ; dans ce cas, le délégué n’a pas de référence à un objet cible et un objet cible doit être fourni lorsque le délégué est appelé.

Lorsqu’un délégué représente une méthode statique, le délégué stocke une référence au point d’entrée de la méthode. Lorsqu’un délégué représente une méthode statique fermée sur son premier argument, le délégué stocke une référence au point d’entrée de la méthode et une référence à un objet cible assignable au type du premier argument de la méthode. Lorsque le délégué est appelé, le premier argument de la méthode statique reçoit l’objet cible. Ce premier argument doit être un type de référence.

La liste d’appels d’un délégué est un ensemble ordonné de délégués dans lequel chaque élément de la liste appelle exactement une des méthodes représentées par le délégué. Une liste d’appels peut contenir des méthodes dupliquées. Pendant un appel, les méthodes sont appelées dans l’ordre dans lequel elles apparaissent dans la liste d’appels. Un délégué tente d’appeler chaque méthode dans sa liste d’appels ; Les doublons sont appelés une fois pour chaque fois qu’ils apparaissent dans la liste d’appels. Les délégués sont immuables ; une fois créée, la liste d’appels d’un délégué ne change pas.

Les délégués sont appelés multidiffusion, ou combinables, car un délégué peut appeler une ou plusieurs méthodes et peut être utilisé pour combiner des opérations.

La combinaison d’opérations, telles que Combine et Remove, ne modifie pas les délégués existants. Au lieu de cela, une telle opération retourne un nouveau délégué qui contient les résultats de l’opération, un délégué inchangé ou null. Une opération de combinaison retourne null lorsque le résultat de l’opération est un délégué qui ne fait pas référence à au moins une méthode. Une opération de combinaison retourne un délégué inchangé lorsque l’opération demandée n’a aucun effet.

Notes

Les langages managés utilisent les Combine méthodes et Remove pour implémenter des opérations de délégué. Les exemples incluent les AddHandler instructions et RemoveHandler en Visual Basic et les opérateurs += et -= sur les types de délégués en C#.

À compter du .NET Framework 4, les types de délégués génériques peuvent avoir des paramètres de type variant. Les paramètres de type contravariant peuvent être utilisés comme types de paramètres du délégué, et un paramètre de type covariant peut être utilisé comme type de retour. Cette fonctionnalité permet aux types délégués génériques construits à partir de la même définition de type générique d’être compatibles avec l’affectation si leurs arguments de type sont des types de référence avec une relation d’héritage, comme expliqué dans Covariance et Contravariance.

Notes

Les délégués génériques compatibles avec les affectations en raison de la variance ne sont pas nécessairement combinables. Pour être combinables, les types doivent correspondre exactement. Par exemple, supposons qu’une classe nommée Derived soit dérivée d’une classe nommée Base. Un délégué de type Action<Base> (Action(Of Base) en Visual Basic) peut être affecté à une variable de type Action<Derived>, mais les deux délégués ne peuvent pas être combinés, car les types ne correspondent pas exactement.

Si une méthode appelée lève une exception, la méthode cesse de s’exécuter, l’exception est renvoyée à l’appelant du délégué et les méthodes restantes de la liste d’appels ne sont pas appelées. Le fait d’intercepter l’exception dans l’appelant ne modifie pas ce comportement.

Lorsque la signature des méthodes appelées par un délégué inclut une valeur de retour, le délégué retourne la valeur de retour du dernier élément de la liste d’appel. Lorsque la signature inclut un paramètre transmis par référence, la valeur finale du paramètre est le résultat de chaque méthode de la liste d’appels qui s’exécute de manière séquentielle et met à jour la valeur du paramètre.

L’équivalent le plus proche d’un délégué en C est un pointeur de fonction. Un délégué peut représenter une méthode statique ou une méthode instance. Lorsque le délégué représente une méthode instance, le délégué stocke non seulement une référence au point d’entrée de la méthode, mais également une référence à la classe instance. Contrairement aux pointeurs de fonction, les délégués sont orientés objet et de type safe.

Pour obtenir des exemples, consultez Remarques supplémentaires sur l’API pour System.Delegate.CreateDelegate.

Constructeurs

Delegate(Object, String)

Initialise un délégué qui appelle la méthode d'instance spécifiée sur l'instance de classe spécifiée.

Delegate(Type, String)

Initialise un délégué qui appelle la méthode statique spécifiée à partir de la classe spécifiée.

Propriétés

Method

Obtient la méthode représentée par le délégué.

Target

Obtient l'instance de classe sur laquelle le délégué actuel appelle la méthode d'instance.

Méthodes

Clone()

Crée une copie superficielle du délégué.

Combine(Delegate, Delegate)

Concatène les listes d'appel de deux délégués.

Combine(Delegate[])

Concatène les listes d'appel d'un tableau de délégués.

CombineImpl(Delegate)

Concatène les listes d'appel du délégué multicast (pouvant être combiné) spécifié et du délégué multicast (pouvant être combiné) actuel.

CreateDelegate(Type, MethodInfo)

Crée un délégué du type spécifié pour représenter la méthode spécifiée.

CreateDelegate(Type, MethodInfo, Boolean)

Crée un délégué du type spécifié pour représenter la méthode statique spécifiée, avec le comportement spécifié en cas d'échec de la liaison.

CreateDelegate(Type, Object, MethodInfo)

Crée un délégué du type spécifié qui représente la méthode statique ou méthode d'instance spécifiée, avec le premier argument spécifié.

CreateDelegate(Type, Object, MethodInfo, Boolean)

Crée un délégué du type spécifié qui représente la méthode statique ou d'instance spécifiée, avec le premier argument spécifié et le comportement spécifié en cas d'échec de la liaison.

CreateDelegate(Type, Object, String)

Crée un délégué du type spécifié qui représente la méthode d'instance spécifiée à appeler sur l'instance de classe spécifiée.

CreateDelegate(Type, Object, String, Boolean)

Crée un délégué du type spécifié qui représente la méthode d'instance spécifiée à appeler sur l'instance de classe spécifiée, avec le respect de la casse spécifié.

CreateDelegate(Type, Object, String, Boolean, Boolean)

Crée un délégué du type spécifié qui représente la méthode d'instance spécifiée à appeler sur l'instance de classe spécifiée, avec le respect de la casse spécifié et le comportement spécifié en cas d'échec de la liaison.

CreateDelegate(Type, Type, String)

Crée un délégué du type spécifié qui représente la méthode statique spécifiée de la classe spécifiée.

CreateDelegate(Type, Type, String, Boolean)

Crée un délégué du type spécifié qui représente la méthode statique spécifiée de la classe spécifiée, avec le respect de la casse spécifié.

CreateDelegate(Type, Type, String, Boolean, Boolean)

Crée un délégué du type spécifié qui représente la méthode statique spécifiée de la classe spécifiée, avec le respect de la casse spécifié et le comportement spécifié en cas d'échec de la liaison.

DynamicInvoke(Object[])

Appelle de manière dynamique (avec liaison tardive) la méthode représentée par le délégué actuel.

DynamicInvokeImpl(Object[])

Appelle de manière dynamique (avec liaison tardive) la méthode représentée par le délégué actuel.

Equals(Object)

Détermine si l'objet spécifié et le délégué actuel sont du même type et partagent les mêmes cibles, méthodes et liste d'appel.

GetHashCode()

Retourne un code de hachage pour le délégué.

GetInvocationList()

Retourne la liste d'appel du délégué.

GetMethodImpl()

Obtient la méthode représentée par le délégué actuel.

GetObjectData(SerializationInfo, StreamingContext)
Obsolète.

Non pris en charge.

GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
Remove(Delegate, Delegate)

Supprime la dernière occurrence de la liste d'appel d'un délégué dans la liste d'appel d'un autre délégué.

RemoveAll(Delegate, Delegate)

Supprime toutes les occurrences de la liste d'appel d'un délégué dans la liste d'appel d'un autre délégué.

RemoveImpl(Delegate)

Supprime la liste d'appel d'un délégué de la liste d'appel d'un autre délégué.

ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

Opérateurs

Equality(Delegate, Delegate)

Détermine si les délégués spécifiés sont égaux.

Inequality(Delegate, Delegate)

Détermine si les délégués spécifiés ne sont pas égaux.

Méthodes d’extension

GetMethodInfo(Delegate)

Obtient un objet qui représente la méthode représentée par le délégué spécifié.

S’applique à

Voir aussi