接口事件的实际使用

接口事件的强大function(在接口内声明事件)的一个很好的例子是什么?

大多数时候我只看到界面内部的公共抽象方法。

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

这是我的界面。

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(string data) { Data = data; } public string Data { get; private set; } } 

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

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

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

这是一个例子

 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。

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

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

INotifyPropertyChanged用于整个框架。

只需查看INotifyPropertyChanged.PropertyChanged事件即可

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