Static event

Résolu
Signaler
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Salut, c'est quoi le "sender" d'un event déclaré en static !? Je suppose que c'est "null" mais j'ai pas trouvé la confirmation dans la doc..

11 réponses

Messages postés
108
Date d'inscription
vendredi 11 juillet 2003
Statut
Membre
Dernière intervention
27 novembre 2007

http://www.labo-dotnet.com/desktopmodules/LaboDotnet.Articles/contentfiles/pdf/csharp.pdf

La méthode GetType, retourne un objet de type System.Type incluant des méthodes permettant d'obtenir des informations sur les constructeurs, méthodes, les champs et les propriétés implémentés dans la classe.

L'opérateur typeof permet de récupérer l'objet System.Type de l'objet passé en paramètre. L'opérateur typeof ne fonctionne qu'avec des types connus au moment de la compilation.

-- AOGie --
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Apparemment c'est ce qu'ils font mais je ne les ai pas tous essayés non plus, abonne toi dans un prog de test et met du point d'arret ;-)

Pour le typeof/GetType dans ton cas le choix est vite fait : tu es dans un contexte static, donc pas de this.GetType()
Et la méthode Type.GetType() demandant le nom complet sous forme de chaine c'est un peu "lourd" face au typeof :-)
Sinon je pense plutot que le fait de mettre un typeof declenche l'utilisation d'une méthode de System.Type (GetTypeFromHandle ou qqch du genre) mais ne donne pas lieu à un remplacement "en dur" à la compilation.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
108
Date d'inscription
vendredi 11 juillet 2003
Statut
Membre
Dernière intervention
27 novembre 2007

En général, si la classe s'appelle "MyClass", on a l'habitude d'y placer typeof(MyClass).

-- AOGie --
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Salut Aogie, vi justement j'ai pensé que peut etre il fallait passer le type de la classe mais comme j'ai déja un code assez lent.. c'est couteux en performance un apple à typeof !?? Parce que j'ai pas encore bien compris la difference avec la methode GetType qui elle peut renvoyer un type à l'execution, ca voudrait dire que typeof travaille en static au niveau du compilateur !? comme sizeof en C si je me trompe pas !?
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Salut,

Le "sender" est spécifié par celui qui lève l'event, donc il n'y a pas vraiment de définition exacte.
Sauf si tu parles d'un event défini dans un type du framework lui même.

Donc pour résumer, si l'event défini en static est levé depuis une instance de la classe, "sender" peut très bien être l'instance.

Après si tu n'a pas besoin de specifier un "sender", ne le défini tout simplement pas dans ton delegate
Ex : public delegate void MonEventHandler(MonEventArgs args);

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Merci pour le lien.. Mais la définition de l'opérateur typeof je ne la trouve toujours pas très clair.. Je sais bien que cet opérateur fonctionne uniquement avec des types connus au moment de la compilation, c'est bien pour ca que dans mon message précédent je dit que la methode GetType travaille au moment de l'éxecution elle ! Mais que faut il comprendre ? L'opérateur typeof est donc un opérateur static qui n'engendre aucun code suplémentaire à l'éxecution et donc aucun coût en terme de performance ?
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Coq, ma classe est une classe static ( private ctor ) avec un event static.. et j'ai mis un sender pour faire comme Microsoft, je pensais qu'il fallait respecter ce modèle !?
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
A bien y penser c'est probablement le cas en effet.
Dans ce cas passe null, si tu n'as pas besoin de connaitre le type. (comme c'est le cas sur les events de la classe SystemEvents par exemple)

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Si tu dis que les events de la classe SystemEvents passent null et bien je vais faire pareil ! Coq tu ne te prononces pas sur le cas de typeof !? ( J'attends la réponse de Aogie avant de valider les réponses )
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Oui dans ce cas précis j'ai pas le choix y'a pas d'instance de ma classe.. C'est le comportement en général que j'essaye de comprendre.. Et je pense comme toi, y'a peu de chance pour que typeof code "en dur" comme tu dis.. C'est trompeur avec l'opérateur sizeof qui en C peut renvoyer une constante à la compilation.. Bon bha si tu croises Anders Hejlsberg je compte sur toi pour lui demander : ))
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
lol
C'est pas demain la veille je crois ^^

Cocoricoooooooo !!!!
coq
MVP Visual C#