Delegate Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de l’année 2024, nous abandonnerons progressivement le mécanisme de retour d’information GitHub Issues pour le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultez :Soumettre et afficher des commentaires pour