web-dev-qa-db-fra.com

Utilisation pratique des événements d'interface

Quel est un bon exemple de la puissance des événements d'interface (déclarer des événements à l'intérieur de l'interface)?

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

30
user160677

J'ai utilisé des événements pour signaler lorsqu'un port série a reçu des données.

Voici mon interface.

public interface ISerialPortWatcher
{
    event EventHandler<ReceivedDataEventArgs> ReceivedData;
    event EventHandler StartedListening;
    event EventHandler StoppedListening;

    SerialPortSettings PortOptions { set; }

    bool Listening { get; set; }
    void Stop();
    void Start();
}

public class ReceivedDataEventArgs : EventArgs
{
    public ReceivedDataEventArgs(string data)
    {
        Data = data;
    }
    public string Data { get; private set; }
}
50
Daniel A. White

Un excellent exemple dans la framework .NET est l'interface INOTICYPROPERTYCHANGED . Cette interface est composée d'un seul membre: l'événement PropertyChanged .

Dans WPF, vous pouvez affirmer qu'un contrôle affichera une propriété spécifique d'une instance d'objet. Mais comment cette mise à jour de contrôle si la propriété sous-jacente change-t-elle?

Si l'objet lié implémente la Inotifypropertychangned interface, le framework WPF peut simplement écouter Acte de propriété et mettre à jour de manière appropriée.

17
Andrew Shepherd

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 du code comme celui-ci dans 1 de mes applications. L'application a été écrite dans Winforms, puis améliorée sur WPF.

13
Andrew Keith

Les événements d'interfaces fonctionnent à peu près comme des méthodes. Vous pouvez les utiliser simplement comment vous utiliseriez une interface.

public interface IInterface {
    event EventHandler QuestionAsked;
}

public class Class : IInterface {
    event EventHandler QuestionAsked;

    //As with typical events you might want an protected OnQuestionAsked
}
4
Bob

InotifyPropertyChanged est utilisé dans le cadre.

Il suffit de regarder le inotifypropertychanganged.propertychanged événement

4
Rohan West

Un scénario classique est un motif MVP avec vue passive. La forme implémie une inteface de vue qui a un événement naméchangé. Le présentateur qui crée/utilise la vue s'abonne à cet événement. Lorsque le nom du texte dans la zone de texte est modifié, la vue incendie cet événement. Le présentateur est alors notifié. Étant donné que le présentateur ne connaît que l'événement à partir de l'interface de visualisation, vous pouvez fournir une idée moquure pour les tests. La vue est complètement découplée de la présentatrice.

2
softveda