délégué (C++/CLI et C++/CX)delegate (C++/CLI and C++/CX)

Déclare un type qui représente un pointeur de fonction.Declares a type that represents a function pointer.

Tous les runtimesAll Runtimes

Le Windows Runtime et le Common Language Runtime prennent en charge les délégués.Both the Windows Runtime and common language runtime support delegates.

NotesRemarks

delegate est un mot clé contextuel.delegate is a context-sensitive keyword. Pour plus d’informations, consultez Mots clés contextuels.For more information, see Context-Sensitive Keywords.

Vous pouvez détecter, au moment de la compilation, si un type est délégué, avec le trait de type __is_delegate().To detect at compile time if a type is a delegate, use the __is_delegate() type trait. Pour plus d’informations, consultez Prise en charge du compilateur pour les caractéristiques de type.For more information, see Compiler Support for Type Traits.

Windows RuntimeWindows Runtime

C++/CX prend en charge les délégués avec la syntaxe suivante.C++/CX supports delegates with the following syntax.

SyntaxeSyntax

access
delegate
return-type
delegate-type-identifier
(
[ parameters ]
)

ParamètresParameters

accéderaccess
facultatif Accessibilité du délégué, qui peut être public (valeur par défaut) ou private .(optional) The accessibility of the delegate, which can be public (the default) or private. Le prototype de fonction peut également être qualifié avec const les volatile Mots clés ou.The function prototype can also be qualified with the const or volatile keywords.

type de retourreturn-type
Le type de retour du prototype de fonction.The return type of the function prototype.

delegate-type-identifierdelegate-type-identifier
Le nom du type de délégué déclaré.The name of the declared delegate type.

parametersparameters
(Facultatif) Les types et identificateurs du prototype de fonction.(Optional) The types and identifiers of the function prototype.

NotesRemarks

Utilisez delegate-type-identifier pour déclarer un événement avec le même prototype que le délégué.Use the delegate-type-identifier to declare an event with the same prototype as the delegate. Pour plus d’informations, consultez Délégués (C++/CX).For more information, see Delegates (C++/CX).

SpécificationsRequirements

Option du compilateur : /ZWCompiler option: /ZW

Common Language RuntimeCommon Language Runtime

Le common language runtime prend en charge les délégués avec la syntaxe suivante.The common language runtime supports delegates with the following syntax.

SyntaxeSyntax

access
delegate
function_declaration

ParamètresParameters

accéderaccess
(facultatif) L’accessibilité du délégué hors de l’assembly, qui peut être public ou private.(optional) The accessibility of the delegate outside of the assembly can be public or private. La valeur par défaut est private.The default is private. À l’intérieur d’une classe, un délégué peut disposer de n’importe quelle accessibilité.Inside a class, a delegate can have any accessibility.

function_declarationfunction_declaration
La signature de la fonction pouvant être liée au délégué.The signature of the function that can be bound to the delegate. Le type de retour d’un délégué peut être n’importe quel type managé.The return type of a delegate can be any managed type. Pour des raisons d’interopérabilité, il est recommandé que le type de retour d’un délégué soit un type CLS.For interoperability reasons, it is recommended that the return type of a delegate be a CLS type.

Pour définir un délégué indépendant, le premier paramètre de function_declaration doit être le type du this pointeur pour l’objet.To define an unbound delegate, the first parameter in function_declaration should be the type of the this pointer for the object.

NotesRemarks

Les délégués sont multidiffusion : le « pointeur de fonction » peut être lié à une ou plusieurs méthodes dans une classe managée.Delegates are multicast: the "function pointer" can be bound to one or more methods within a managed class. Le mot clé delegate définit un type de délégué multidiffusion avec une signature de méthode spécifique.The delegate keyword defines a multicast delegate type with a specific method signature.

Un délégué peut également être lié à une méthode d’une classe value, par exemple une méthode static.A delegate can also be bound to a method of a value class, such as a static method.

Ce délégué présente les caractéristiques suivantes :A delegate has the following characteristics:

  • Hérite de System::MulticastDelegate.It inherits from System::MulticastDelegate.

  • Il possède un constructeur qui accepte deux arguments : un pointeur vers une classe managée ou NULL (dans le cas d’une liaison à une méthode statique) et une méthode complète du type spécifié.It has a constructor that takes two arguments: a pointer to a managed class or NULL (in the case of binding to a static method) and a fully qualified method of the specified type.

  • Elle possède une méthode appelée Invoke, dont la signature correspond à la signature déclarée du délégué.It has a method called Invoke, whose signature matches the declared signature of the delegate.

Lorsqu’un délégué est appelé, sa ou ses fonctions sont appelées dans l’ordre dans lequel elles ont été attachées.When a delegate is invoked, its function(s) are called in the order they were attached.

La valeur de retour d’un délégué est la valeur de retour de sa dernière fonction membre attachée.The return value of a delegate is the return value from its last attached member function.

Les délégués ne peuvent pas être surchargés.Delegates cannot be overloaded.

Les délégués peuvent être dépendants ou indépendants.Delegates can be bound or unbound.

Lorsque vous instanciez un délégué dépendant, le premier argument doit être une référence d’objet.When you instantiate a bound delegate, the first argument shall be an object reference. Le deuxième argument d’une instanciation de délégué doit être l’adresse d’une méthode d’un objet de classe managée ou un pointeur vers une méthode de type valeur.The second argument of a delegate instantiation shall either be the address of a method of a managed class object, or a pointer to a method of a value type. Le deuxième argument d’une instanciation de délégué doit nommer la méthode avec la syntaxe de portée de classe complète et appliquer l’opérateur address-of.The second argument of a delegate instantiation must name the method with the full class scope syntax and apply the address-of operator.

Lorsque vous instanciez un délégué indépendant, le premier argument doit être l’adresse d’une méthode d’un objet de classe managée ou un pointeur vers une méthode de type valeur.When you instantiate an unbound delegate, the first argument shall either be the address of a method of a managed class object, or a pointer to a method of a value type. L’argument doit nommer la méthode avec la syntaxe de portée de classe complète et appliquer l’opérateur address-of.The argument must name the method with the full class scope syntax and apply the address-of operator.

Lorsque vous créez un délégué pour une fonction static ou global, un seul paramètre est obligatoire : la fonction (en option, l’adresse de la fonction).When creating a delegate to a static or global function, only one parameter is required: the function (optionally, the address of the function).

Pour plus d’informations sur les délégués, consultezFor more information on delegates, see

SpécificationsRequirements

Option du compilateur : /clrCompiler option: /clr

ExemplesExamples

L’exemple suivant montre comment déclarer, initialiser et appeler des délégués.The following example shows how to declare, initialize, and invoke delegates.

// mcppv2_delegate.cpp
// compile with: /clr
using namespace System;

// declare a delegate
public delegate void MyDel(int i);

ref class A {
public:
   void func1(int i) {
      Console::WriteLine("in func1 {0}", i);
   }

   void func2(int i) {
      Console::WriteLine("in func2 {0}", i);
   }

   static void func3(int i) {
      Console::WriteLine("in static func3 {0}", i);
   }
};

int main () {
   A ^ a = gcnew A;

   // declare a delegate instance
   MyDel^ DelInst;

   // test if delegate is initialized
   if (DelInst)
      DelInst(7);

   // assigning to delegate
   DelInst = gcnew MyDel(a, &A::func1);

   // invoke delegate
   if (DelInst)
      DelInst(8);

   // add a function
   DelInst += gcnew MyDel(a, &A::func2);

   DelInst(9);

   // remove a function
   DelInst -= gcnew MyDel(a, &A::func1);

   // invoke delegate with Invoke
   DelInst->Invoke(10);

   // make delegate to static function
   MyDel ^ StaticDelInst = gcnew MyDel(&A::func3);
   StaticDelInst(11);
}
in func1 8

in func1 9

in func2 9

in func2 10

in static func3 11

Voir aussiSee also

Extensions de composant pour .NET et UWPComponent Extensions for .NET and UWP