Dot-Net

VB.NET:即使沒有事件處理程序也會引發事件嗎?

  • October 15, 2012

我有一個類可以下載、檢查和保存一些大型 XML 文件。有時我希望 UI 告訴我發生了什麼,但有時我會使用類並忽略事件。所以我在十幾個地方放置了這樣的程式碼行:

RaiseEvent Report("Sending request: " & queryString)

RaiseEvent Report("Saving file: " & fileName)

RaiseEvent Report("Finished")

我的問題是——如果沒有人在監聽它們,這些事件會減慢我的程式碼嗎?他們還會開火嗎?

沒有魔法,隱藏在 RaiseEvent 下的程式碼完全符合您的預期,它遍歷一組處理程序,並執行每個處理程序。檢查是否有任何處理程序的成本是微不足道的,不用擔心。

如果您的真正問題是“為了節省時間,我是否應該在引發事件之前檢查事件是否有處理程序?” . . . 那麼答案是“不”,這樣做你將一無所獲。

此外,除非您需要,否則不要擔心優化(請參閱此Wikipedia 條目以了解原因。)

回复:打電話GetMystring()

是的,這與您在 C# 中引發事件的方式有關,在 C# 中,您在引發事件之前檢查處理程序的存在。例如:

if (MyEvent != null)
   MyEvent(GetMyString())

順便說一句,很好的實驗:)

我自己的回答:

在 VB.NET 中,如果沒有設置處理程序來偵聽該事件,則該事件不會觸發。

我做了一個小實驗,其中引發事件的程式碼傳遞函式的結果,並且該函式僅在設置了事件處理程序來處理事件時執行。

RaiseEvent Report(GetMyString())

換句話說,我是說GetMystring除非處理程序實際存在,否則不會呼叫上面的函式。

引用自:https://stackoverflow.com/questions/250494