2010-05-28 39 views
5

從C#通過CLR處理髮件​​人型空當:爲什麼與事件

說明很多人奇怪爲什麼 事件模式要求發件人 參數始終是Object類型 的畢竟,因爲MailManager將 是提高與 事件的NEWMAIL EventArgs對象的唯一類型,它使 多爲回調方法意義 這樣是原型:

void MethodName(MailManager sender, NewMailEventArgs e); 

該模式要求發件人 參數是Object類型的大多是 因爲繼承的,如果麥 lManager使用什麼作爲 SmtpMailManager一個基類?在這種情況下, 回調方法應該有原型如下 SmtpMailManager,而不是郵件 經理的 sender參數,但是這是不可能發生的,因爲 SmtpMai lManager剛剛繼承所以代碼 NewMai升的事件,這是 期待SmtpMail經理提高 事件仍必須具有對 sender參數轉換爲SmtpMailManager在其他 也就是說,中投仍需要 ,所以sender參數 還不如分類爲對象。

下原因打字發件人 參數與obj ECT只是 fexibility它允許委託 由多種類型,提供使用 該穿過的NEWMAIL EventArgs對象例如一個事件,一個 PopMai lManager類可以使用 委託即使該類不 從郵件管理器衍生

我根本無法理解,爲什麼發件人是一個對象 - 爲何不能被泛型?所以大多數的時候我們並不需要做普通鑄件

+2

請在發佈之前先格式化您的文本 - 這篇文章和上一篇文章中的額外空格使其非常難以閱讀(如同所有文章均以代碼形式發佈) 。 – 2010-05-28 14:53:04

回答

7

泛型在C#版本不存在1.

3

即使仿製藥是解決此實現,你仍然有同樣的問題。在您的MailManager對象中,您將調用this.EventName<MailManager>(this, args),因此它只會匹配訂閱該類型事件的用戶。當然,他們可以重新修改CLR查找方法和事件的整個過程,以便它很鬆散。然後,我們將使用Javascript#而不是C#,但是:p

相關問題