接口事件的强大功能(在接口内声明事件)有什么好的例子?
大多数时候我在界面中只看到过公共抽象方法。
答案 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)
答案 5 :(得分:2)
经典场景是具有被动视图的MVP模式。 该表单实现了一个具有NameChanged事件的视图接口。 创建/使用视图的演示者订阅此事件。 当文本框中的名称文本被更改时,视图将触发此事件。然后通知演示者。 由于演示者只知道来自视图界面的事件,因此您可以提供用于测试的模拟视图。该视图与演示者完全分离。