J'ai besoin d'avoir des délégués dans ma classe.
Je voudrais utiliser l'interface pour me "rappeler" de définir ces délégués.
Comment?
Ma classe ressemble à ceci:
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
{
// ?????
}
Depuis .NET 3.5, vous pouvez également utiliser les délégués System.Action, sans avoir à déclarer votre propre type.
Cela aboutirait à l'interface suivante:
la source
Exposez simplement le délégué en tant que propriété
la source
La réponse de Jon Skeet est juste, je veux juste ajouter une note.
Les interfaces ne sont pas là pour vous "rappeler" ce que vous devez faire ou ce que vous devez inclure dans vos cours. Les interfaces sont des moyens d'abstraction, utilisés dans les méthodes de programmation et de conception orientées objet. Peut-être que vous n'avez pas du tout besoin d'une déclaration d'interface, à moins que vous ne souhaitiez voir des instances de classe concrètes comme interface ailleurs dans votre programme (Abstraction).
Si vous souhaitez appliquer certaines normes de codage dans votre projet, vous pouvez essayer d'utiliser des outils d'analyse de code (comme dans Visual Studio) - Ils autorisent les extensions, que vous pouvez incorporer pour ajouter vos propres règles d'analyse de code.
En utilisant l'analyse de code, si vous "oubliez" d'ajouter les délégués (bien que je ne vois pas l'intérêt de l'oublier, comme si le délégué n'est pas utilisé, ce n'est pas nécessaire), vous obtiendrez un avertissement / une erreur.
la source
L'un de vos commentaires faisait référence au type de retour du gestionnaire d'événements. Êtes-vous plus préoccupé par le type de gestionnaire ou les données provenant de l'événement? Si c'est le dernier, cela peut aider. Sinon, cette solution ne suffira pas, mais peut vous aider à vous rapprocher de ce que vous recherchez.
Tout ce que vous avez à faire est de déclarer vos gestionnaires d'événements en tant que 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 conrete ressemblerait à ceci:
Votre interface ressemblerait à ceci:
Maintenant que les arguments d'é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
la source
L'interface héritée dans votre classe dérivée vous rappellera de définir et de relier les éléments que vous y avez déclarés.
Mais vous voudrez peut-être également l'utiliser explicitement et vous devrez toujours l'associer à un objet.
Par exemple, en utilisant un modèle d'inversion de contrôle:
Vous pouvez essayer quelque chose comme ça.
la source