Utilisation pratique des événements d’interface

Quel est un bon exemple de la puissance des événements d’interface (déclaration d’événements dans une interface)?

La plupart du temps, je n’ai vu que des méthodes abstraites publiques à l’intérieur de l’interface.

J’ai utilisé des événements pour signaler lorsqu’un port série recevait des données.

Voici mon interface.

public interface ISerialPortWatcher { event EventHandler ReceivedData; event EventHandler StartedListening; event EventHandler StoppedListening; SerialPortSettings PortOptions { set; } bool Listening { get; set; } void Stop(); void Start(); } public class ReceivedDataEventArgs : EventArgs { public ReceivedDataEventArgs(ssortingng data) { Data = data; } public ssortingng Data { get; private set; } } 

L’ interface INotifyPropertyChanged est un excellent exemple dans le cadre .NET. Cette interface est composée d’un seul membre: l’événement PropertyChanged .

Dans WPF, vous pouvez indiquer qu’un contrôle affichera une propriété spécifique d’une instance d’object. Mais comment ce contrôle sera-t-il mis à jour si la propriété sous-jacente change?

Si l’object lié implémente l’interface INotifyPropertyChanged , le cadre WPF peut simplement écouter PropertyChanged et se mettre à jour correctement.

voici un exemple

 public interface IMainAppWindow { event EventHandler Closed; } // version 1 main window public MainForm : Form , IMainAppWindow { } // version 2 main window public MainWindow : Window , IMainAppWindow { event EventHandler Closed; public void OnClosed(object sender,RoutedEventArgs e) { if(Closed != null) { Closed(this,e); } } } 

J’ai un code comme celui-ci dans l’une de mes applications. L’application a été écrite en Winforms, puis mise à niveau vers WPF.

Les événements dans les interfaces fonctionnent à peu près comme des méthodes. Vous pouvez les utiliser comme vous utiliseriez n’importe quelle interface.

 public interface IInterface { event EventHandler QuestionAsked; } public class Class : IInterface { event EventHandler QuestionAsked; //As with typical events you might want an protected OnQuestionAsked } 

INotifyPropertyChanged est utilisé à travers le cadre.

Il suffit de regarder l’événement INotifyPropertyChanged.PropertyChanged

Un scénario classique est le modèle MVP avec vue passive. Le formulaire implémente une interface de vue comportant un événement NameChanged. Le présentateur qui crée / utilise la vue souscrit à cet événement. Lorsque le texte du nom dans la zone de texte est modifié, la vue déclenche cet événement. Le présentateur est alors informé. Étant donné que le présentateur ne connaît que l’événement de l’interface d’affichage, vous pouvez fournir une vue fictive à des fins de test. La vue est complètement découplée du présentateur.