Partager via


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 autorisé 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 des types délégués.

La plupart des langages implémentent un delegate mot clé et les compilateurs de ces langages peuvent dériver de la MulticastDelegate classe . Par conséquent, les utilisateurs doivent utiliser le delegate mot clé fourni 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 en réflexion lorsque vous souhaitez rechercher 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 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 objet cible assignable à ce type.

  • Méthode d’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é d’instance ouverte.

  • 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 d’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 d’instance ouverte, il stocke une référence au point d’entrée de la méthode. La signature déléguée 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 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. Pendant un appel, les méthodes sont appelées dans l’ordre dans lequel elles apparaissent dans la liste d’appel. 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’appel. Les délégués sont immuables ; une fois créée, 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 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 dans Visual Basic et les opérateurs += et -= sur les types délégués en C#.

À compter de .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 l’affectation si leurs arguments de type sont des types 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’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 dans la liste d’appel. Lorsque la signature inclut un paramètre qui est passé par référence, la valeur finale du paramètre est le résultat de chaque méthode de la liste d’appel qui s’exécute séquentiellement 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 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 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

HasSingleTarget

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.

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>)

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.

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.

EnumerateInvocationList<TDelegate>(TDelegate)

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.

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