2011-04-07 49 views
4

IDesign編碼標準規定「不要提供公共事件成員變量,而應使用事件訪問器。」C#標準:「不提供公共事件成員變量」的基本原理?

我明白有些情況下,事件訪問器是有用的(我認爲Control使用字典只存儲分配給節省內存的事件)。但是,要求這個樣板代碼總是存在的是什麼?

編輯:明確

public event EventHandler EventName; 

public event EventHandler EventName { add { ... } remove { ... } } 

[見IDesign Coding Standard - 編碼標準 - 42]

+0

理性可能與公共領域背後的理性相同。 – 2011-04-07 15:02:48

+1

的確,你可以將一個公共領域變成一個自動屬性,但我認爲編譯器基本上是在幕後爲一個事件做了這件事。 – briantyler 2011-04-07 15:04:48

+0

你的意思是「田野般的事件」;是的,它們在許多方面與自動道具非常相似,並且像汽車道具一樣,它們並不是唯一有效的實施。 – 2011-04-07 15:06:04

回答

3

委派領域不是事件 - 他們只是委託領域。他們可能(非常不正確)檢查,無效並由外部調用者調用,相反,相反,以便設計事件(通常只能由聲明類來處理)。

封裝允許間接,驗證等;都是可取的。而且成本很低。這會影響你的代碼的性能,這不是正常的。

它也允許它們使用於接口;字段不能在接口上聲明。


編輯:

的問題是有點不清楚,但如果問題很簡單場式的事件VS明確的添加/有代表靠山卸下...然後就是愚蠢的。不要添加不必要的代碼。除非有足夠的事件來保證EventHandlerList實現,否則類似事件的字段將是首選。

特別是,4.0編譯器現在非常明智地執行線程安全(這在歷史上並非如此)。

+0

-1:@Marc:我認爲IDesign編碼標準不是在討論委託字段,OP也不是。 – 2011-04-07 15:07:55

+1

這與此有關嗎?所引用的編碼指南不會談論*代表*但是事件。還是他們只是使用誤導性的術語? – 2011-04-07 15:09:00

+0

@Marc:這是在談論'公共事件的EventHandler事件名稱;''對公共事件的EventHandler事件名稱{添加{...}刪除{...}}' – 2011-04-07 15:09:56