接口事件的实际使用
接口事件的强大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事件的视图接口。 创建/使用视图的演示者订阅此事件。 当文本框中的名称文本被更改时,视图将触发此事件。 然后通知演示者。 由于演示者只知道来自视图界面的事件,因此您可以提供模拟视图以进行测试。 该视图与演示者完全分离。