Comment ajouter un délégué à une interface C#
J'ai besoin d'avoir certains délégués dans ma classe.
Je voudrais utiliser l'interface pour "rappeler" me à l'ensemble de ces délégués.
Comment?
Ma classe ressembler à 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 de force ces délégués:
public interface myInterface
{
//?????
}
Vous devez vous connecter pour publier un commentaire.
Ceux qui sont en déclarant délégué types. Ils n'appartiennent pas à une interface. Les événements à l'aide de ces types délégués sont beaux à être dans l'interface si:
La mise en œuvre ne va pas (et ne devrait pas) redeclare le type de délégué, pas plus qu'redeclare tout autre type utilisé dans une interface.
Depuis .NET 3.5, vous pouvez également utiliser le Système.L'Action des délégués, sans la nécessité de déclarer votre propre type.
Cela aurait pour résultat l'interface suivante:
Simplement exposer le délégué à la propriété
Jon Skeet la réponse est juste, je veux juste ajouter une remarque.
Interfaces ne sont pas là pour "rappeler" ce qu'il faut faire, ou ce qu'il faut inclure dans vos classes. Les Interfaces sont des moyens de l'abstraction, utilisé en programmation Orientée Objet et des méthodes de conception. Peut-être que vous n'avez pas besoin d'une déclaration d'interface à tous, sauf si vous voulez voir certaines des instances de classe que l'interface ailleurs dans votre programme (l'Abstraction).
Si vous souhaitez faire respecter certaines normes de codage dans votre projet, vous pouvez essayer d'utiliser les outils d'analyse de code (comme dans Visual Studio) - Ils permettent des extensions, que vous pouvez incorporer à ajouter votre propre code de règles d'analyse.
À l'aide de l'analyse de code, si vous "oubliez" pour ajouter les délégués (bien que je ne vois pas le point de l'oublier, comme si le délégué n'est pas utilisé, il n'est pas nécessaire), vous obtiendrez un message d'avertissement /d'erreur.
L'un de vos commentaires référencé le type de retour de gestionnaire d'événements. Vous êtes davantage concerné par le type du gestionnaire, ou les données de retour de l'événement? Si c'est le dernier, alors cela peut aider. Si non, alors cette solution ne sera pas suffisant, mais il peut aider vous obtenir plus près de ce que vous cherchez.
Tout ce que vous avez à faire est de déclarer vos gestionnaires d'événements comme générique des gestionnaires d'événements à la fois l'interface et la mise en place et vous pouvez personnaliser les résultats de retour.
Votre béton classe devrait ressembler à ceci:
Votre interface devrait ressembler à ceci:
Maintenant que l'événement les arguments sont de retour de vos types, vous pouvez le brancher dans n'importe gestionnaire que vous définissez.
Pour référence:
https://msdn.microsoft.com/en-us/library/edzehd2t(v=vs. 110).aspx
L'interface héritée au sein de votre classe dérivée de vous rappeler de définir et de lien entre les trucs que vous avez déclaré dans il.
Mais vous pouvez également l'utiliser explicitement et vous aurez toujours besoin de l'associer à un objet.
Par exemple à l'aide d'une Inversion de modèle de Contrôle:
Vous pouvez essayer quelque chose comme cela.