實際使用接口事件
回答
我使用事件來指示串行端口接收數據的時間。
這是我的界面。
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