簡體   English   中英

何時使用自定義C#事件

[英]When to use custom c# events

什么時候在C#中引發事件是合適的?

例如,在我們的系統中,有數據對象從外部系統發送給我們,例如每分鍾50個。 收到數據包后,我們需要讓它由另一個對象處理。 在這種情況下,使用事件或簡單的方法調用會更好嗎?

從直覺上看,事件似乎很自然,但是與僅使用常規方法調用相比,該事件可能提供什么優勢尚不清楚。

當發起動作的代碼不了解直接對該動作做出反應的代碼時,應使用事件。

一方面,事件在這里聽起來確實合適,因為處理數據接收的代碼不應依賴於對所述數據執行某些操作的代碼的實現。 否則,數據接收代碼現在負責兩件事-接收數據委派數據處理。

另一方面,如果數據的特定處理直接與外部調用方發送的數據相關,則將其作為函數調用可能更有意義。 您的問題中確實沒有足夠的信息可以肯定地說。

IMO使用隊列將是適當的第一步。 處理隊列的代碼可以依次引發事件或接受委托,該委托根據數據對象的類型執行不同的任務。 Action或Func在這里應該運作良好。

請記住,使用事件時,必須確保及時取消處理程序的注冊,否則可能會泄漏。

在這種情況下,事件沒有意義。 事件往往是為了通知正在發生的事情,而不是替換函數調用。 他們提供更多信息。

因此,您可能希望傳入一個Action <>函數,以便隨后可以調用傳入的函數進行處理。

這將比函數調用IMO更好。

您可以在此頁面查看示例: http : //www.claassen.net/geek/blog/2007/12/action-func-never-write-another.html

更新:如果您不使用C#3,則可能要使用委托,而事件處理程序是一個專門的委托。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM