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 :

Delegate & event, ne pas exposer le délégué


Sujet :

C#

  1. #1
    Membre actif
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2004
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 477
    Points : 223
    Points
    223
    Par défaut Delegate & event, ne pas exposer le délégué
    Bonjour à tous,

    Dans mes classes je développe des évènements basé sur des délégués comme suit:

    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
     
     
    public delegate void rowLoaded(T BO);
     
    protected rowLoaded onRowLoaded;
     
    public event rowLoaded OnRowLoaded
            {
                add
                {
                    if (onRowLoaded == null)
                        onRowLoaded += value;
                    else onRowLoaded = value;
                }
                remove
                {
                    onRowLoaded -= value;
                }
            }
    Ce code fonctionne très bien, par contre je ne trouve pas la méthode pour ne pas exposer mes délégués en public.
    J'ai essayé de le basculer en "protected" mais ça ne fonctionne pas.

    Est ce que vous avez une idée ?

  2. #2
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 895
    Points : 1 911
    Points
    1 911
    Par défaut
    Je n'ai pas la moindre idée de ce que tu cherches à faire et je doute fortement que tu aies besoin de définir add et remove sur ton événement.

  3. #3
    Membre actif
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2004
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 477
    Points : 223
    Points
    223
    Par défaut
    Déclaration d'un evènement accessible en dehors de la classe ... voila ce que je fais ! Et pour déclarer un evènement il faut déclaré un délegué ...

  4. #4
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 895
    Points : 1 911
    Points
    1 911
    Par défaut
    Un delegate est la définition d'une fonction, tout comme une classe est la définition d'un objet. Il faut que le delegate soit visible du code qui doit l'utiliser, notamment pour s'abonner à un événement.

  5. #5
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 895
    Points : 1 911
    Points
    1 911
    Par défaut
    Un exemple de gestion d'événement :

    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
    24
    // Argument d'événement
    public class ValueEmittedEventArgs<T> : EventArgs
    {
    	public ValueEmittedEventArgs(T value) => Value = value;
     
    	public T Value { get; }
    }
     
    // delegate d'événement
    public delegate void ValueEmittedEventHandler<T>(object sender, ValueEmittedEventArgs<T> e);
     
    // Interface déclarant un événement de type ValueEmittedEventHandler<T>
    public interface IValueEmitter<T>
    {
    	event ValueEmittedEventHandler<T> ValueEmitted;
    }
     
    // Classe implémentant IValueEmitter<T> et invoquant l'événement
    public class ValueRelay<T> : IValueEmitter<T>
    {
    	public event ValueEmittedEventHandler<T> ValueEmitted;
     
    	public void Emit(T value) => ValueEmitted?.Invoke(this, new ValueEmittedEventArgs<T>(value));
    }
    À noter qu'il existe un delegate générique EventHandler<T> qui prend en paramètre le type d'EventArgs à gérer. Avec l'exemple au-dessus il permettrait de se passer de déclarer le delegate ValueEmittedEventHandler<T> en déclarant à la place un EventHandler<ValueEmittedEventArgs<T>> dans l'interface IValueEmitter.

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/03/2019, 00h31
  2. Réponses: 5
    Dernier message: 27/11/2011, 17h00
  3. exemple delegate et event
    Par mariox dans le forum C#
    Réponses: 4
    Dernier message: 18/02/2011, 00h03
  4. Réponses: 4
    Dernier message: 22/07/2010, 09h59
  5. Events : ne pas les écouter temporairement
    Par flzox dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/09/2008, 11h24

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