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 :

Event multicast créé automatiquement


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par défaut Event multicast créé automatiquement
    Bonjour,

    J'ai généré les classes C# d'une dll à l'aide de Reflector. Mon problème est que je n'arrive pas du tout à comprendre la syntaxe qui a été généré automatiquement, elle semble bonne car VS ne me signale pas d'erreur mais je ne la comprend pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    // J'ai un délégué(qui est dans une classe  ModificationWAffectableEventHandler.cs):
    public delegate void ModificationWAffectableEventHandler(WAffectable data);
     
    // et "l'instance" du délégué suivante dans ma classe WAffectation.cs:
    public event ModificationWAffectationEventHandler OnModification
            {
                [MethodImpl(MethodImplOptions.Synchronized)] add
                {
                    this.OnModification = (ModificationWAffectationEventHandler) Delegate.Combine(this.OnModification, value);
                }
                [MethodImpl(MethodImplOptions.Synchronized)] remove
                {
                    this.OnModification = (ModificationWAffectationEventHandler) Delegate.Remove(this.OnModification, value);
                }
                raise
                {
                    ModificationWAffectationEventHandler handler = this.OnModification;
                    if (handler != null)
                    {
                        handler(value0);
                    }
                }
            }
    J'ai eu beau chercher dans une "Bible" du C# et sur le Net des infos concernant des delegués de cette forme mais je n'ai rien trouvé...
    Une âme charitable pourrait-elle m'expliquer ???

    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ce n'est pas du code que tu es supposé voir, c'est les mécanismes internes de C#... En pratique, tu as seulement besoin de déclarer l'évènement comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public event ModificationWAffectationEventHandler OnModification;
    Mais le compilateur génère du code MSIL pour "add" (correspondant à l'opérateur +=), "remove" (-=) et "raise" (appel de l'évènement). Comme Reflector ne fait pas la différence entre le code écrit par le développeur et le code généré par le compilateur, il transforme ça en C# sans réfléchir...

    EDIT: soit dit en passant, le programme que tu as décompilé a sans doute été fait en VB.NET et non en C#... L'instruction Raise de VB.NET vérifie avant l'appel s'il y a des handlers pour l'évènement (d'où le bloc raise), alors qu'en C# c'est la responsabilité du développeur (pas de bloc raise généré). C'est dommage d'ailleurs...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par défaut
    Ok, merci...
    Pour info, le code d'avant a été fait en C++ managé...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    ah ok... je ne connaissais pas la syntaxe des évènements en C++/CLI, mais effectivement ça semble correspondre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB6] [Interface] Redimensionnement automatique
    Par ychalan dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/09/2002, 18h32
  2. BDE : Configurer automatiquement le NETDIR
    Par Harry dans le forum Paradox
    Réponses: 10
    Dernier message: 29/07/2002, 11h33
  3. Génerer automatiquement plusieurs fichier .doc
    Par brunovitch dans le forum QuickReport
    Réponses: 3
    Dernier message: 09/07/2002, 08h19
  4. Re-dimensionnement automatique de composants
    Par ludo_7 dans le forum C++Builder
    Réponses: 10
    Dernier message: 16/05/2002, 16h35

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