Partage via


Delegate Classe

Définition

Représente un délégué, qui 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 classe Delegate est la classe de base pour les types délégués. Toutefois, seul le système et les compilateurs peuvent dériver explicitement de la classe Delegate ou de la classe MulticastDelegate. Il n’est pas non plus permis de dériver un nouveau type d’un type délégué. La classe Delegate n’est pas considérée comme un type délégué ; il s’agit d’une classe utilisée pour dériver des types délégués.

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

Note

Le Common Language Runtime fournit une méthode Invoke 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 méthode Invoke est utile dans 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 méthodes BeginInvoke et EndInvoke, pour activer l’appel asynchrone du délégué. Pour plus d’informations sur ces méthodes, consultez Appel asynchrone de méthodes synchrones.

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 une instance d’un type délégué qui a des références à :

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

  • Méthode d’instance d’un type, avec le paramètre de this masqué exposé dans la liste de paramètres formelle. Le délégué est dit être un délégué d’instance ouvert.

  • 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 méthode CreateDelegate(Type, Object, MethodInfo, Boolean).

Lorsqu’un délégué représente une méthode d’instance fermée sur son premier argument (le 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ée 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 d’instance ouverte, il stocke une référence au point d’entrée de la méthode. La signature de délégué doit inclure le paramètre de this masqué dans sa liste de paramètres formel ; 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’appel d’un délégué est un ensemble ordonné de délégués dans lequel chaque élément de la liste appelle exactement l’une des méthodes représentées par le délégué. Une liste d’appels peut contenir des méthodes en double. Lors d’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’appel ; 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éé, la liste d’appel 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é dans la combinaison d’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 référence pas 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.

Note

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

À compter du .NET Framework 4, les types 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 les affectations si leurs arguments de type sont des types de référence avec une relation d’héritage, comme expliqué dans Covariance et Contravariance.

Note

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 est 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 arrête l’exécution, l’exception est renvoyée à l’appelant du délégué et les méthodes restantes de la liste d’appel ne sont pas appelées. L’interception de 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 passé par référence, la valeur finale du paramètre est le résultat de chaque méthode de la liste d’appel s’exécutant séquentiellement et mettant à 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 d’instance. Lorsque le délégué représente une méthode d’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 à l’instance de classe. Contrairement aux pointeurs de fonction, les délégués sont orientés objet et de type sécurisé.

Pour obtenir des exemples, consultez remarques sur l’API supplémentaire 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

HasSingleTarget

Obtient une valeur qui indique si le Delegate a une cible d’appel unique.

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.

Combine(ReadOnlySpan<Delegate>)

Concatène les listes d’appel d’une étendue de délégués.

CombineImpl(Delegate)

Concatène les listes d’appel du délégué de multidiffusion (combinable) spécifié et du délégué multidiffusion actuel (combinable).

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 de défaillance de liaison.

CreateDelegate(Type, Object, MethodInfo)

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é.

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 de défaillance de 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 la casse spécifiée.

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 la sensibilité de la casse spécifiée et le comportement spécifié en cas d’échec de 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 la casse spécifiée.

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 la sensibilité de la casse spécifiée et le comportement spécifié en cas d’échec de liaison.

DynamicInvoke(Object[])

Appelle dynamiquement (liaison tardive) la méthode représentée par le délégué actuel.

DynamicInvokeImpl(Object[])

Appelle dynamiquement (liaison tardive) la méthode représentée par le délégué actuel.

EnumerateInvocationList<TDelegate>(TDelegate)

Obtient un énumérateur pour les cibles d’appel de ce délégué.

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 la Type de l’instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Objectactuel.

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

Supprime la dernière occurrence de la liste d’appel d’un délégué de 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é de 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