event mot clé (C++/CLI et C++/CX)event keyword (C++/CLI and C++/CX)

Le event mot clé déclare un événement, qui est une notification aux abonnés inscrits (gestionnaires d’événements) qu’une chose d’intérêt s’est produite.The event keyword declares an event, which is a notification to registered subscribers (event handlers) that something of interest has occurred.

Tous les runtimesAll Runtimes

C++/CX prend en charge la déclaration d’un membre d’événement ou d’un bloc d’événement.C++/CX supports declaring an event member or an event block. Un membre d'événement est un raccourci pour déclarer un bloc d'événement.An event member is shorthand for declaring an event block. Par défaut, un membre d'événement déclare les fonctions add, remove et raise qui sont déclarées explicitement dans un bloc d'événement.By default, an event member declares the add, remove, and raise functions that are declared explicitly in an event block. Pour personnaliser les fonctions dans un membre d'événement, déclarez un bloc d'événement à la place, puis remplacez les fonctions dont vous avez besoin.To customize the functions in an event member, declare an event block instead and then override the functions that you require.

SyntaxeSyntax

// event data member
modifier event delegate^ event_name;

// event block
modifier event delegate^ event_name
{
   modifier return_value add(delegate^ name);
   modifier void remove(delegate^ name);
   modifier void raise(parameters);
}

ParamètresParameters

modificateurmodifier
Modificateur qui peut être utilisé sur la déclaration event ou une méthode d’accesseur d’événement.A modifier that can be used on either the event declaration or an event accessor method. Les valeurs possibles sont static et virtual .Possible values are static and virtual.

disposerdelegate
Délégué dont la signature doit correspondre au gestionnaire d’événements.The delegate, whose signature the event handler must match.

event_nameevent_name
Nom de l’événement.The name of the event.

return_valuereturn_value
Valeur de retour de la méthode d’accesseur d’événement.The return value of the event accessor method. Pour être vérifiable, le type de retour doit être void .To be verifiable, the return type must be void.

paramètresparameters
(facultatif) Paramètres de la méthode raise, qui correspondent à la signature du paramètre delegate.(optional) Parameters for the raise method, which match the signature of the delegate parameter.

NotesRemarks

Un événement est une association entre un délégué et un Gestionnaire d’événements.An event is an association between a delegate and an event handler. Un gestionnaire d’événements est une fonction membre qui répond quand l’événement est déclenché.An event handler is a member function that responds when the event gets triggered. Elle permet aux clients de n’importe quelle classe d’inscrire des méthodes qui correspondent à la signature et au type de retour du délégué.It allows clients from any class to register methods that match the signature and return type of the delegate.

Il existe deux types de déclarations d'événements :There are two kinds of events declarations:

membre de données d’événementevent data member
Le compilateur crée automatiquement le stockage de l'événement sous la forme d'un membre du type délégué et crée des fonctions membres add, remove et raise internes.The compiler automatically creates storage for the event in the form of a member of the delegate type, and creates internal add, remove, and raise member functions. Un membre de données d'événement doit être déclaré à l'intérieur d'une classe.An event data member must be declared inside a class. Le type de retour du délégué doit correspondre à celui du gestionnaire d'événements.The return type of the return type of the delegate must match the return type of the event handler.

bloc d’événementsevent block
Un bloc d'événement vous permet de déclarer et personnaliser explicitement le comportement des méthodes add, remove et raise.An event block enables you to explicitly declare and customize the behavior of the add, remove, and raise methods.

Vous pouvez utiliser operator += et operator -= pour ajouter et supprimer un gestionnaire d’événements, ou appeler add les remove méthodes et explicitement.You can use operator += and operator -= to add and remove an event handler, or call the add and remove methods explicitly.

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

Windows RuntimeWindows Runtime

NotesRemarks

Pour plus d’informations, consultez Événements (C++/CX).For more information, see Events (C++/CX).

Pour ajouter et supprimer ultérieurement un gestionnaire d’événements, enregistrez la EventRegistrationToken structure retournée par l' add opération.To add and later remove an event handler, save the EventRegistrationToken structure that's returned by the add operation. Ensuite, dans l' remove opération, utilisez la EventRegistrationToken structure enregistrée pour identifier le gestionnaire d’événements à supprimer.Then in the remove operation, use the saved EventRegistrationToken structure to identify the event handler to remove.

SpécificationsRequirements

Option du compilateur : /ZWCompiler option: /ZW

Common Language RuntimeCommon Language Runtime

Le mot clé event vous permet de déclarer un événement.The event keyword lets you declare an event. Un événement est un moyen pour une classe de fournir des notifications quand un fait digne d'intérêt se produit.An event is a way for a class to provide notifications when something of interest happens.

SyntaxeSyntax

// event data member
modifier event delegate^ event_name;

// event block
modifier event delegate^ event_name
{
   modifier return_value add(delegate^ name);
   modifier void remove(delegate^ name);
   modifier void raise(parameters);
}

ParamètresParameters

modificateurmodifier
Modificateur qui peut être utilisé sur la déclaration event ou une méthode d’accesseur d’événement.A modifier that can be used on either the event declaration or an event accessor method. Les valeurs possibles sont static et virtual .Possible values are static and virtual.

disposerdelegate
Délégué dont la signature doit correspondre au gestionnaire d’événements.The delegate, whose signature the event handler must match.

event_nameevent_name
Nom de l’événement.The name of the event.

return_valuereturn_value
Valeur de retour de la méthode d’accesseur d’événement.The return value of the event accessor method. Pour être vérifiable, le type de retour doit être void .To be verifiable, the return type must be void.

paramètresparameters
(facultatif) Paramètres de la méthode raise, qui correspondent à la signature du paramètre delegate.(optional) Parameters for the raise method, which match the signature of the delegate parameter.

NotesRemarks

Un événement est une association entre un délégué et un Gestionnaire d’événements.An event is an association between a delegate and an event handler. Un gestionnaire d’événements est une fonction membre qui répond quand l’événement est déclenché.An event handler is a member function that responds when the event gets triggered. Elle permet aux clients de n’importe quelle classe d’inscrire des méthodes qui correspondent à la signature et au type de retour du délégué sous-jacent.It allows clients from any class to register methods that match the signature and return type of the underlying delegate.

Le délégué peut avoir une ou plusieurs méthodes associées.The delegate can have one or more associated methods. Ces méthodes sont appelées lorsque votre code indique que l’événement s’est produit.These methods get called when your code indicates that the event has occurred. Un événement propre à un programme peut être accessible à d'autres programmes qui ciblent le Common Language Runtime du .NET Framework.An event in one program can be made available to other programs that target the .NET Framework common language runtime.

Il existe deux types de déclarations d’événements :There are two kinds of event declarations:

membres de données d’événementevent data members
Le compilateur crée un stockage pour les événements de membre de données en tant que membre du type délégué.The compiler creates storage for data member events as a member of the delegate type. Un membre de données d'événement doit être déclaré à l'intérieur d'une classe.An event data member must be declared inside a class. Il est également connu sous le nom d' événement trivial.It's also known as a trivial event. Pour obtenir un exemple, consultez l’exemple de code.See the code sample for an example.

blocs d’événementsevent blocks
Les blocs d’événements vous permettent de personnaliser le comportement des add remove méthodes, et raise , en implémentant les add méthodes, remove et raise .Event blocks let you customize the behavior of the add, remove, and raise methods, by implementing add, remove, and raise methods. La signature des add méthodes, remove et raise doit correspondre à la signature du délégué.The signature of the add, remove, and raise methods must match the signature of the delegate. Les événements de bloc d’événements ne sont pas des membres de données.Event block events aren't data members. Toute utilisation en tant que membre de données génère une erreur du compilateur.Any use as a data member generates a compiler error.

Le type de retour du gestionnaire d'événements doit correspondre à celui du délégué.The return type of the event handler must match the return type of the delegate.

Dans .NET Framework, vous pouvez traiter un membre de données comme s'il s'agissait d'une méthode (autrement dit, la méthode Invoke de son délégué correspondant).In the .NET Framework, you can treat a data member as if it were a method itself (that is, the Invoke method of its corresponding delegate). Pour ce faire, prédéfinissez le type délégué pour la déclaration d’un membre de données d’événement managé.To do so, predefine the delegate type for declaring a managed event data member. En revanche, une méthode d’événement managé définit implicitement le délégué managé correspondant s’il n’est pas déjà défini.In contrast, a managed event method implicitly defines the corresponding managed delegate if it isn't already defined. Pour obtenir un exemple, consultez l’exemple de code à la fin de cet article.See the code sample at the end of this article for an example.

Lors de la déclaration d’un événement managé, vous pouvez spécifier add les remove accesseurs et qui seront appelés lorsque les gestionnaires d’événements sont ajoutés ou supprimés à l’aide += des opérateurs et -= .When declaring a managed event, you can specify add and remove accessors that will be called when event handlers are added or removed using operators += and -=. Les add remove méthodes, et raise peuvent être appelées explicitement.The add, remove, and raise methods can be called explicitly.

Les étapes suivantes doivent être effectuées pour créer et utiliser des événements dans Microsoft C++ :The following steps must be taken to create and use events in Microsoft C++:

  1. Créez ou identifiez un délégué.Create or identify a delegate. Si vous définissez votre propre événement, vous devez également vous assurer qu’il existe un délégué à utiliser avec le event mot clé.If you're defining your own event, you must also ensure that there's a delegate to use with the event keyword. Si l'événement est prédéfini, dans le .NET Framework par exemple, alors les consommateurs de l'événement doivent uniquement connaître le nom du délégué.If the event is predefined, in the .NET Framework for example, then consumers of the event need only know the name of the delegate.

  2. Créez une classe qui contient :Create a class that contains:

    • Un événement créé à partir du délégué.An event created from the delegate.

    • Facultatif Méthode qui vérifie qu’une instance du délégué déclaré avec le event mot clé existe.(Optional) A method that verifies that an instance of the delegate declared with the event keyword exists. Sinon, cette logique doit être placée dans le code qui déclenche l'événement.Otherwise, this logic must be placed in the code that fires the event.

    • Des méthodes qui appellent l'événement.Methods that call the event. Ces méthodes peuvent être des substitutions de certaines fonctionnalités de la classe de base.These methods can be overrides of some base class functionality.

    Cette classe définit l'événement.This class defines the event.

  3. Définissez une ou plusieurs classes qui connectent les méthodes à l'événement.Define one or more classes that connect methods to the event. Chacune de ces classes associe une ou plusieurs méthodes à l'événement dans la classe de base.Each of these classes will associate one or more methods with the event in the base class.

  4. Utilisez l'événement :Use the event:

    • Créez un objet de la classe qui contient la déclaration de l'événement.Create an object of the class that contains the event declaration.

    • Créez un objet de la classe qui contient la déclaration de l'événement.Create an object of the class that contains the event definition.

Pour plus d’informations sur les événements C++/CLI, consultez événements dans une interface.For more information on C++/CLI events, see Events in an Interface.

SpécificationsRequirements

Option du compilateur : /clrCompiler option: /clr

ExemplesExamples

L’exemple de code suivant illustre la déclaration de paires de délégués, d’événements et de gestionnaires d’événements.The following code example demonstrates declaring pairs of delegates, events, and event handlers. Il montre comment s’abonner (ajouter), appeler, puis annuler l’abonnement (supprimer) des gestionnaires d’événements.It shows how to subscribe (add), invoke, and then unsubscribe (remove) the event handlers.

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

// declare delegates
delegate void ClickEventHandler(int, double);
delegate void DblClickEventHandler(String^);

// class that defines events
ref class EventSource {
public:
   event ClickEventHandler^ OnClick;   // declare the event OnClick
   event DblClickEventHandler^ OnDblClick;   // declare OnDblClick

   void FireEvents() {
      // raises events
      OnClick(7, 3.14159);
      OnDblClick("Hello");
   }
};

// class that defines methods that will called when event occurs
ref class EventReceiver {
public:
   void OnMyClick(int i, double d) {
      Console::WriteLine("OnClick: {0}, {1}", i, d);
   }

   void OnMyDblClick(String^ str) {
      Console::WriteLine("OnDblClick: {0}", str);
   }
};

int main() {
   EventSource ^ MyEventSource = gcnew EventSource();
   EventReceiver^ MyEventReceiver = gcnew EventReceiver();

   // hook handler to event
   MyEventSource->OnClick += gcnew ClickEventHandler(MyEventReceiver, &EventReceiver::OnMyClick);
   MyEventSource->OnDblClick += gcnew DblClickEventHandler(MyEventReceiver, &EventReceiver::OnMyDblClick);

   // invoke events
   MyEventSource->FireEvents();

   // unhook handler to event
   MyEventSource->OnClick -= gcnew ClickEventHandler(MyEventReceiver, &EventReceiver::OnMyClick);
   MyEventSource->OnDblClick -= gcnew DblClickEventHandler(MyEventReceiver, &EventReceiver::OnMyDblClick);
}
OnClick: 7, 3.14159

OnDblClick: Hello

L’exemple de code suivant illustre la logique utilisée pour générer la raise méthode d’un événement trivial.The following code example demonstrates the logic used to generate the raise method of a trivial event. Si l’événement a un ou plusieurs abonnés, appeler la méthode raise implicitement ou explicitement appelle le délégué.If the event has one or more subscribers, calling the raise method implicitly or explicitly calls the delegate. Si le type de retour du délégué n’est pas void et s’il n’y a aucun abonné aux événements, la raise méthode retourne la valeur par défaut pour le type délégué.If the delegate's return type isn't void and if there are zero event subscribers, the raise method returns the default value for the delegate type. S’il n’y a pas d’abonnés aux événements, l’appel de la raise méthode retourne immédiatement et aucune exception n’est levée.If there are no event subscribers, calling the raise method immediately returns and no exception is raised. Si le type de retour du délégué n’est pas void , le type délégué est retourné.If the delegate return type isn't void, the delegate type is returned.

// trivial_events.cpp
// compile with: /clr /c
using namespace System;
public delegate int Del();
public ref struct C {
   int i;
   event Del^ MyEvent;

   void FireEvent() {
      i = MyEvent();
   }
};

ref struct EventReceiver {
   int OnMyClick() { return 0; }
};

int main() {
   C c;
   c.i = 687;

   c.FireEvent();
   Console::WriteLine(c.i);
   c.i = 688;

   EventReceiver^ MyEventReceiver = gcnew EventReceiver();
   c.MyEvent += gcnew Del(MyEventReceiver, &EventReceiver::OnMyClick);
   Console::WriteLine(c.i);
}
0

688

Voir aussiSee also

Extensions de composants pour .NET et UWPComponent extensions for .NET and UWP