Partager via


déléguer (extensions du composant C++)

Déclare un type qui représente un pointeur fonction.

Tous les runtimes

Windows Runtime et le Common Language Runtime prennent en charge les délégués.

3z2x4f55.collapse_all(fr-fr,VS.110).gifRemarques

delegate est un mot clé contextuel.Pour plus d'informations, consultez Mots clés contextuels (extensions du composant C++).

Pour détecter au moment de la compilation si un type est un délégué, utilisez le trait de type __is_delegate().Pour plus d'informations, consultez Prise en charge du compilateur pour les Type Traits (extensions du composant C++).

Windows Runtime

C++/CX prend en charge les délégués à l'aide de la syntaxe suivante.

3z2x4f55.collapse_all(fr-fr,VS.110).gifSyntaxe

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

3z2x4f55.collapse_all(fr-fr,VS.110).gifParamètres

  • accès
    (facultatif) Accessibilité du délégué, qui peut être public (par défaut) ou private.Le prototype de fonction peut également être qualifié avec les mots clés const ou volatile.

  • type-retour
    Type de retour du prototype de fonction.

  • délégué-type-identificateur
    Nom du type du délégué déclaré.

  • parameters
    (Facultatif) Types et identificateurs du prototype de fonction.

3z2x4f55.collapse_all(fr-fr,VS.110).gifRemarques

Utilisez délégué-type-identificateur pour déclarer un événement avec le même prototype que le délégué.Pour plus d'informations, consultez Délégués (C++/CX).

3z2x4f55.collapse_all(fr-fr,VS.110).gifConfiguration requise

Option du compilateur : /ZW

Common Language Runtime

Le Common Language Runtime prend en charge les délégués avec la syntaxe suivante.

3z2x4f55.collapse_all(fr-fr,VS.110).gifSyntaxe

access delegate function_declaration

3z2x4f55.collapse_all(fr-fr,VS.110).gifParamètres

  • accès
    (facultatif) L'accessibilité du délégué en dehors de l'assembly peut être publique et privée.La valeur par défaut est Privé.À l'intérieur d'une classe, un délégué peut avoir n'importe quelle accessibilité.

  • function_declaration
    Signature de la fonction qui peut être liée au délégué.Le type de retour d'un délégué peut être tout type managé.Pour des raisons d'interopérabilité, il est recommandé que le retour d'un délégué soit de type CLS.

    Pour définir un délégué indépendant, le premier paramètre de function_declaration doit être le type du pointeur this de l'objet.Pour plus d'informations, consultez délégués indépendants.

3z2x4f55.collapse_all(fr-fr,VS.110).gifRemarques

Les délégués sont multicast : le « pointeur fonction » peut être lié à une ou plusieurs méthodes dans une classe managée.Le mot clé délégué définit un type délégué multicast avec une signature de méthode spécifique.

Un délégué peut également être lié à une méthode d'une classe Valeur, telle qu'une méthode statique.

Un délégué possède les caractéristiques suivantes :

  • Il hérite de System::MulticastDelegate.

  • Il possède un constructeur qui accepte deux arguments : un pointeur vers une classe managée ou NULL (dans le cas de liaison à une méthode statique) et une méthode qualifiée complète de type spécifié.

  • Il possède une méthode appelée Invoke, dont la signature correspond à la signature déclarée du délégué.

Lorsqu'un délégué est appelé, ses fonctions sont appelées dans l'ordre dans lequel elles ont été attachées.

La valeur de retour d'un délégué est la valeur de retour de sa dernière fonction membre jointe.

Les délégués ne peuvent pas être surchargés.

Les délégués peuvent être liés ou indépendants.

Lorsque vous instanciez un délégué lié, le premier argument doit être une référence d'objet.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é, ou un pointeur vers une méthode d'un type valeur.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.

Lorsque vous instanciez un délégué indépendant, le premier argument doit être l'adresse d'une méthode d'objet de classe managée, ou un pointeur vers une méthode d'un type valeur.L'argument doit nommer la méthode avec la syntaxe de portée de classe complète et appliquer l'opérateur address-of.

Lors de la création d'un délégué d'une fonction statique ou globale, un seul paramètre est requis : la fonction (éventuellement, l'adresse de la fonction).

Pour plus d'informations sur les délégués, consultez

3z2x4f55.collapse_all(fr-fr,VS.110).gifConfiguration requise

Option du compilateur : /clr

3z2x4f55.collapse_all(fr-fr,VS.110).gifExemples

Exemple

L'exemple suivant montre comment déclarer, initialiser et appeler des délégués.

// 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);
}

Sortie

  
  
  
  
  

Voir aussi

Concepts

Extensions de composant pour les plateformes Runtime