回答
事件是essentialy屬性,其類型是代表。 event
關鍵字的意圖是表示對象觸發的實際事件(即回調函數),而不是簡單地保存委託的屬性。這種區別對於需要向您顯示對象可以觸發什麼事件的GUI工具很重要。當然,這可能是通過註釋完成的,但這不是爲C#選擇的設計。
在Anders Hejlsberg(C#的創建者)的a recent interview中提到,如果他再次設計它,他可能不會讓事件變得如此特別。
event關鍵字爲 委託聲明,它允許 被包含在一個接口, 約束它調用從 對其進行聲明的類內的改性劑,提供 它具有一對可定製的 訪問器(添加和刪除)並強制代理的簽名(在.NET框架中使用 時)。
請參閱here一個很好的解釋。
實際上,您可以在界面中添加委託屬性......它與 – digEmAll 2011-05-18 07:07:29
作爲屬性yes基本相同,但不作爲公共字段。 – fearofawhackplanet 2011-05-18 07:10:47
用關鍵字event
聲明的成員確實是MulticastDelegate
。關於它的唯一特點是,儘管您聲明事件public
,但您只能從班內調用事件/委託。這是因爲編譯器會生成一個專用字段,存儲委託和公共方法以訂閱和取消訂閱事件。如果您直接使用Delegate
,則任何人都可以隨時調用委託人。
所以事件實際上只是一個委託的漂亮封裝。
是的,這對我有幫助;) – user1859587 2012-11-28 18:39:36
事件限制代理列表的操作方式,因爲您只能通過+=
和-=
操作員添加和刪除代表。另一方面,由於下面的定義,代表不承擔這個限制。
public event DelegateType Events;
public DelegateType Delegates;
你可以做以下
instance.Delegates = null; // clear the list of delegates
,但是編譯器會阻止你做
instance.Events = null; // doesn't compile
當編譯Events
字段實際上private
是,儘管其宣佈爲public
和編譯器只需添加用於操作列表的添加/刪除方法即可。
- 1. Unix時間有什麼特別之處?
- 2. 當其他人升職時,有什麼特別的事情嗎?
- 3. 什麼是SetupAPI,SetupAPI1和SetupAPI2?他們之間有什麼區別?
- 4. 什麼是C++中的「set」?他們什麼時候有用?
- 5. C++中的抽象類機制有什麼特別之處?
- 6. 他們之間有區別,如果有,它是什麼?
- 7. Indexhibit有什麼特別之處?
- 8. 80端口有什麼特別之處?
- 9. prn.csv有什麼特別之處?
- 10. UI線程有什麼特別之處?
- 11. 關閉有什麼特別之處?
- 12. `str_replace`有什麼特別之處?
- 13. const @「SomeString」有什麼特別之處?
- 14. 屬性有什麼特別之處?
- 15. 關於0x55AA有什麼特別之處?
- 16. JavaScript中的「事件委託」和「事件處理」之間的區別是什麼?
- 17. 「setNeedsUpdateConstraints」和「layoutIfNeeded」之間的區別是什麼?他們什麼時候會被叫?
- 18. 那麼Powershell PSC1文件有什麼特別之處?
- 19. C++預處理器中的R和L有什麼特別之處?
- 20. 什麼是在C#中的事件和代表的替代?
- 21. linux上的文件描述符3有什麼特別之處?
- 22. 談到Web Analytics時,SharePoint有什麼特別之處?
- 23. 什麼是OLTP和OLAP。他們有什麼區別?
- 24. 什麼是CSS選擇器':'和'::'?他們有什麼區別?
- 25. Backbone.js View的特殊選項有什麼特別之處?
- 26. .NET 3.5中HashSet <T>的特別之處是什麼?
- 27. 帶單字母擴展名的C++頭文件有什麼特別之處?
- 28. JavaScript中的「name」變量有什麼特別之處?
- 29. 版本11.2.0.3中的com.oracle:ojdbc6有什麼特別之處?
- 30. JavaScript對象中的init函數有什麼特別之處嗎?
+1!我現在在學習C#,我也有同樣的問題。 – user1859587 2012-11-28 18:39:14