实际使用接口事件
回答
我使用事件来指示串行端口接收数据的时间。
这是我的界面。
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; }
}
接口中的事件几乎像方法一样工作。你可以使用它们,你将如何使用任何接口。
public interface IInterface {
event EventHandler QuestionAsked;
}
public class Class : IInterface {
event EventHandler QuestionAsked;
//As with typical events you might want an protected OnQuestionAsked
}
这里是一个例子
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。
.NET框架内的一个很好的例子是INotifyPropertyChanged接口。该接口只包含一个成员:PropertyChanged事件。
在WPF中,您可以声明控件将显示对象实例的特定属性。但是如果底层属性发生变化,这个控件将如何更新?
如果绑定的对象实现了 INotifyPropertyChanged的接口,WPF框架可以只听的PropertyChanged和更新适当。
INotifyPropertyChanged是贯穿整个框架。
一个典型的场景是MVP模式与被动视图。 表单实现了具有NameChanged事件的视图接口。 创建/使用视图的演示者订阅了此事件。 当文本框中的名称文本发生更改时,会触发此事件。然后通知主持人。 由于演示者只知道来自视图界面的事件,因此您可以提供模拟视图进行测试。该视图与演示者完全分离。
在文章[Model View Presenter Styles](https://lostechies.com/derekgreer/2008/11/23/model-view-presenter-styles/)中描述了三种不同的MVP模式,称为** Observing Presenter Style **的第三种模式似乎与此处描述的** Passive View **模式最为接近。 – DavidRR 2015-08-12 17:27:11
- 1. 如何确保实际提升接口中的事件?
- 2. Flex实际CreationComplete事件
- 3. C++ cli接口事件显式实现
- 4. 将事件添加到接口/实现
- 5. 在java中实际使用接口是什么?
- 6. 在接口中使用事件
- 7. 如何使用显式接口事件?
- 8. 实际使用
- 9. SQLAlchemy事件接口
- 10. 事实之后实现接口
- 11. 接口端口必须通过一个实际的接口:系统verilog
- 12. 如何获得间接实现的通用接口的实际类型参数?
- 13. C#实际使用
- 14. 实际使用IBOutletColletion
- 15. 实际使用dynamic_cast?
- 16. 实现通用接口与事件多次
- 17. PHP检查是否实际类实现接口
- 18. 事件回调接口
- 19. TDelegate作为事件的通用接口?
- 20. 如何使用uiBinder实例化GWT中的事件处理程序接口?
- 21. 使用另一个接口从接口实现通用方法
- 22. 使用服务器的实际IP和端口连接到多播服务器
- 23. 为什么Javascript事件与实际用户事件有所不同?
- 24. 如何在C#中实现抽象事件或接口方法事件?
- 25. VB到C#翻译事件处理程序,实现接口事件
- 26. 实现插件接口
- 27. 使用通用方法实现接口
- 28. 是实际使用的xsi:schemaLocation?
- 29. 实际使用IdentityHashMap的
- 30. Vim,实际使用示例
当引发事件时,您应该[复制事件](https://msdn.microsoft.com/en-us/library/w369ty8x%28v=vs.100%29.aspx)(请参阅' OnRaiseCustomEvent()')来避免**竞争条件的可能性**:'EventHandler handler = this.Closed; if(handler!= null){...}' – DavidRR 2015-08-12 17:18:20