La bonne façon de lever des événements à partir de C++/CLI?
Je me demandais quelle est la bonne façon de lever des événements à partir de C++/CLI. En C# on should d'abord faire une copie de la gestionnaire, vérifier si elle n'est pas null, et ensuite l'appeler. Est-il une pratique similaire pour le C++/CLI?
OriginalL'auteur Filip Frącz | 2009-01-20
Vous devez vous connecter pour publier un commentaire.
C++/CLI permet de remplacer
raise
dans événement personnalisé gestionnaires de sorte que vous n'avez pas à tester pournull
ou de copie lors de la récolte de l'événement. Bien sûr, à l'intérieur de votre personnaliséraise
vous avez encore à faire.Exemple, adapté de la MSDN pour la correction:
OriginalL'auteur Konrad Rudolph
Ce n'est pas toute l'histoire! Vous n'avez pas à vous soucier null gestionnaires d'événements en C++/CLI. Le code de ces contrôles est généré pour vous. Considérez les points suivants trivial C++/CLI classe.
Si vous compiler cette classe, et de le démonter à l'aide de Réflecteur, vous obtenez le code c# suivant.
Les contrôles habituels sont en train d'être fait dans la méthode raise. Sauf si vous voulez vraiment un comportement personnalisé, vous devez vous sentir à l'aise déclarer votre événement dans la classe ci-dessus, et en le soulevant sans crainte d'une valeur null gestionnaire.
Alors, allez avec un événement personnalisé et de mettre
private:
en face.OriginalL'auteur IV.
Si votre problème est que élever n'est pas privé, puis les implémenter explicitement comme les docs disent:
http://msdn.microsoft.com/en-us/library/5f3csfsa.aspx
En résumé:
Si vous venez d'utiliser la événement mot-clé, vous créez un "trivial" de l'événement. Le compilateur génère ajouter/supprimer/élever et le délégué membre pour vous. L'généré élever fonction (comme les docs disent) vérifie nullptr. Événements triviaux sont documentées ici:
http://msdn.microsoft.com/en-us/library/4b612y2s.aspx
Si vous voulez plus de contrôle", par exemple pour faire élever privé, alors vous devez implémenter explicitement les membres, comme indiqué dans le lien. Vous devez déclarer explicitement un membre de données pour le type de délégué. Ensuite, vous utilisez la événement mot clé de déclarer les événements liés membres, comme dans l'exemple de Microsoft:
Verbeux, mais il est.
-reilly.
OriginalL'auteur Reilly