IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Branchement sur un evenement


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Par défaut Branchement sur un evenement
    Salut

    Comment fait on pour se brancher sur un evenement qui est definie dans un objet qui est en private dans une classe sans passer par un evenement intermediaire ?

    thx ++

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 82
    Par défaut
    C'est très simple :-)
    Tu ne peux pas ;-)
    Si tu veux respecter l'encapsulation de ton modèle objet, tout ce qui est privé est innacessible de l'extérieur. Autrement dit si tu as le modèle suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class A
    {
      public event EventHandler MyEvent;
    }
     
    public class B
    {
      private A a = new A;
    }
    Il est parfaitement impossible de faire une sorte de "B.MyEvent" si tu ne redéfinie pas ton évènement dans la classe B.
    La seule solution que je vois ça serait de passer par la réflexion, ce que je ne conseille absolument pas dans ce cas là. Ce qui est privé doit rester privé.

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    s'il est protected tu dois pouvoir en passant par l'héritage sinon en effet c'est pas évident
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Je ne vois aussi que la réflexion pour essayer de récupérer l'ensemble des événement généré dans l'appli et de réagir à ton événement de l'objet privé.

    Il est plus simple de passer par un événement intermédiaire

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    Comme déjà cité précédemment. Tout ce qui est privé doit rester privé.
    Si c'est privé c'est pour une bonne raison, celle que personne d'extérieur à l'objet en cours ne doit pouvoir y accèder et y mettre ses gros doigts partout ou faut pas...

    Certes, le seul moyen d'accèder à un membre privé d'un objet est d'utiliser la Reflexion, mais ce n'est pas que déconseillé, cela va a l'encontre de tout développement objet, sauf cas exceptionnels, quand le modèle a été sciemment conçut comme cela.

    Sinon utiliser des protected scope et hériter la classe est plus propre, mais pas toujours possible.

    Actuellement le framework utilise la Reflexion pour accèder à des méthodes protégées pour la serialisation et le deserialisation par exemple, mais c'est le framework... il est normal que ces fonctions très spéciales ne soient accessible que par la classe elle meme et le framework par le biais de la Reflexion, mais en aucun cas ces fonctions ne devraient etre utilisées par d'autres objets...
    Cette facon de faire peut engendrer des Effets de Bords particulièrement génant et encore plus difficiles à tracer, sans parler des bugs directement liés à ton objet.

    De toutes les mauvaises idées, celle-ci fait partie des pires !

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par Seth77 Voir le message
    Salut

    Comment fait on pour se brancher sur un evenement qui est definie dans un objet qui est en private dans une classe sans passer par un evenement intermediaire ?

    thx ++
    En même temps, mettre un event en private, j'y vois pas trop d'intéret (mais bon, j'y ai pas réflechi plus que ca non plus )

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    En même temps, mettre un event en private, j'y vois pas trop d'intéret (mais bon, j'y ai pas réflechi plus que ca non plus )
    On peut penser à du multithreading avec des événements spécifiques à chaque thread et un objet qui encapsule toutes les thread, un controleur en fait.
    Dans ce cas on peut comprendre l'intéret de déclencher l'enevement d'un thread, qui a été encapsuler dans ce thread pour qu'ils ne soient pas accesibles par les autres.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    Le probleme c'est que le private ne protege pas les champs d'un accès d'objets de meme types entre eux.

    Un objet de type A, peut accèder aux champs privés d'un autre objet de type A, sans utiliser la Reflexion.
    En revanche un objet de type B ne pourra pas y accèder sans faire appel à la Reflexion.

    Donc ya un légé probleme dans ton exemple si tous les threads sont de meme types... s'ils ne sont pas tous de meme types en revanche oui ton exemple est correct, mais dans ce cas, on utilisera SCIEMMENT la Reflexion pour outrepassé les niveaux d'accessibilité. Quand on fait cela on sait qu'on ne provoquera pas d'effets de bords, car on a tout conçut soit meme (ou son équipe) Dans ce cas précis, la Reflexion n'est pas une faute de développement ou de conception.

  9. #9
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Donc ya un légé probleme dans ton exemple si tous les threads sont de meme types... s'ils ne sont pas tous de meme types en revanche oui ton exemple est correct, mais dans ce cas, on utilisera SCIEMMENT la Reflexion pour outrepassé les niveaux d'accessibilité. Quand on fait cela on sait qu'on ne provoquera pas d'effets de bords, car on a tout conçut soit meme (ou son équipe) Dans ce cas précis, la Reflexion n'est pas une faute de développement ou de conception.
    En effet je pensais à des threads de type différent, j'ai oublié de le préciser.

Discussions similaires

  1. [HyperFile] Jointure sur l'événement le plus récent
    Par Tchupacabra dans le forum Langage SQL
    Réponses: 6
    Dernier message: 28/04/2006, 11h05
  2. travailler sur un evenement scroll ??
    Par CAML dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/03/2006, 13h00
  3. Sur quel evenement mettre Dmax?
    Par kabikou dans le forum Access
    Réponses: 18
    Dernier message: 15/09/2005, 00h00
  4. [VB.NET] Action sur l'évènement IMPRESSION
    Par stephane93fr dans le forum ASP.NET
    Réponses: 3
    Dernier message: 27/04/2004, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo