web-dev-qa-db-ja.com

インターフェースイベントの活用

インターフェースイベント(インターフェース内のイベントの宣言)のパワーの良い例は何ですか?

ほとんどの場合、インターフェイス内のパブリック抽象メソッドのみを見てきました。

30
user160677

イベントを使用して、シリアルポートがデータを受信したことを通知しました。

これが私のインターフェースです。

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

.NETフレームワーク内の優れた例は、 INotifyPropertyChanged インターフェイスです。このインターフェイスは、 PropertyChanged イベントの1つのメンバーのみで構成されています。

WPFでは、コントロールがオブジェクトインスタンスの特定のプロパティを表示することを指定できます。しかし、基になるプロパティが変更された場合、このコントロールはどのように更新されますか?

バインドされたオブジェクトが INotifyPropertyChanged インターフェイス、WPFフレームワークは単にリッスンできます PropertyChanged 適切に更新します。

17
Andrew Shepherd

ここに一例があります

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);
    }
  }
}

私のアプリケーションの1つにこのようなコードがいくつかあります。アプリはwinformsで記述され、WPFにアップグレードされました。

13
Andrew Keith

インターフェイスのイベントは、メソッドとほとんど同じように機能します。インターフェースを使用するのと同じように使用できます。

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 はフレームワーク全体で使用されます。

INotifyPropertyChanged.PropertyChanged イベントを見てください。

4
Rohan West

典型的なシナリオは、パッシブビューを持つMVPパターンです。フォームは、NameChangedイベントを持つビューインターフェイスを実装します。ビューを作成/使用するプレゼンターは、このイベントをサブスクライブします。テキストボックスの名前テキストが変更されると、ビューはこのイベントを発生させます。その後、発表者に通知されます。プレゼンターはビューインターフェイスからのイベントのみを認識しているため、テスト用にモックビューを提供できます。ビューはプレゼンターから完全に切り離されています。

2
softveda