接口事件的实际使用

时间:2009-11-17 01:09:45

标签: c# events interface delegates

接口事件的强大功能(在接口内声明事件)有什么好的例子?

大多数时候我在界面中只看到过公共抽象方法。

6 个答案:

答案 0 :(得分:49)

当串口接收数据时,我使用事件发出信号。

这是我的界面。

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

答案 1 :(得分:17)

.NET框架中的一个很好的例子是INotifyPropertyChanged接口。此界面仅包含一个成员:PropertyChanged事件。

在WPF中,您可以声明控件将显示对象实例的特定属性。但是,如果底层属性发生变化,该控件将如何更新?

如果绑定对象实现 INotifyPropertyChanged 接口,则WPF框架只能侦听 PropertyChanged 并进行适当更新。

答案 2 :(得分:13)

这是一个例子

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

我的一个应用程序中有一些这样的代码。该应用程序以winforms编写,然后升级为WPF。

答案 3 :(得分:4)

接口中的事件与方法非常相似。您可以使用它们如何使用任何界面。

public interface IInterface {
    event EventHandler QuestionAsked;
}

public class Class : IInterface {
    event EventHandler QuestionAsked;

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

答案 4 :(得分:4)

整个框架使用

INotifyPropertyChanged

只需查看INotifyPropertyChanged.PropertyChanged事件

即可

答案 5 :(得分:2)

经典场景是具有被动视图的MVP模式。 该表单实现了一个具有NameChanged事件的视图接口。 创建/使用视图的演示者订阅此事件。 当文本框中的名称文本被更改时,视图将触发此事件。然后通知演示者。 由于演示者只知道来自视图界面的事件,因此您可以提供用于测试的模拟视图。该视图与演示者完全分离。