Dot-Net
VB.NET:即使沒有事件處理程序也會引發事件嗎?
我有一個類可以下載、檢查和保存一些大型 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除非處理程序實際存在,否則不會呼叫上面的函式。