98 votes

Comment ajouter un délégué à une interface C#

J'ai besoin d'avoir des délégués dans ma classe.

J'aimerais utiliser l'interface pour me "rappeler" de définir ces délégués.

Comment ?

Ma classe ressemble à ça :

public class ClsPictures : myInterface
{
    // Implementing the IProcess interface
    public event UpdateStatusEventHandler UpdateStatusText;
    public delegate void UpdateStatusEventHandler(string Status);

    public event StartedEventHandler Started;
    public delegate void StartedEventHandler();
}

J'ai besoin d'une interface pour forcer ces délégués :

public interface myInterface
{
   // ?????
}

1voto

Reuben Soto Points 11

L'un de vos commentaires faisait référence au type de retour du gestionnaire d'événements. Êtes-vous plus concerné par le type du gestionnaire ou par les données renvoyées par l'événement ? Si c'est le dernier, alors cette solution peut vous aider. Si ce n'est pas le cas, cette solution ne sera pas suffisante, mais elle peut vous aider à vous rapprocher de ce que vous recherchez.

Il vous suffit de déclarer vos gestionnaires d'événements comme des gestionnaires d'événements génériques à la fois dans l'interface et dans votre implémentation et vous pouvez personnaliser les résultats de retour.

Votre classe de béton ressemblerait à ceci :

public class ClsPictures : myInterface
{
    // Implementing the IProcess interface
    public event EventHandler<UpdateStatusEventArgs> UpdateStatusText;
    //no need for this anymore: public delegate void UpdateStatusEventHandler(string Status);

    public event EventHandler<StartedEventArgs> Started;
    //no need for this anymore: public delegate void StartedEventHandler();
}

Votre interface ressemblerait à ceci :

public interface myInterface
{
   event EventHandler<StartedEventArgs> Started;
   event EventHandler<UpdateStatusEventArgs> UpdateStatusText;
}

Maintenant que les arguments de l'événement renvoient vos types, vous pouvez les accrocher dans n'importe quel gestionnaire que vous définissez.

Pour référence : https://msdn.microsoft.com/en-us/library/edzehd2t(v=vs.110).aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X