2009-06-10 42 views

回答

2

我認爲這是因爲歷史原因混合避免代碼重複。

在.Net 1.0中沒有泛型,因此對於每種可能引發事件的類型,您都被迫定義事件處理程序委託。 像:

public delegate void TextBoxEventHandler(TextBox sender, EventArgs e); 
public delegate void ComboBoxEventHandler(ComboBox sender, EventArgs e); 

的所以取而代之,freamework開發人員創建一個

public delegate void EventHandler(object sender, EventArgs e); 

和用於鑄造/作爲運算符。

從.net 2.0,我們有仿製藥,所以你可以這樣

public delegate void EventHandler<TSender, TEventArgs>(TSender sender, TEventArgs e) where TEventArgs: EventArgs; 

甚至

public delegate void EventHandler<TSender, TEventArgs>(TSender sender, TEventArgs e); 

定義一次,然後使用這個樣子。

public event EventHandler<TextBox, string> TextChanged; 
public event EventHandler<ComboBox, EventArgs> SomeComboBoxEvent; 

但是,這將打破爲.Net 1.0/1.1編寫的所有應用程序,所以框架開發人員將它放在原樣。現在每個人都在使用這些預先通用的類。

另外我不確定如果Windows窗體設計器可以hadle泛型EventHandler。我從來沒有試過去測試它。

在我看來,鍵入(通用)事件比這個標準更好。所以儘可能地使用它。

4

因爲一個事件可以由多個不同的對象/類型引發,所以在編譯時可能不知道類型。

+0

謝謝喬爾。你是指不同類型使用的相同事件?我以爲他們會有自己的獨立事件? – 2009-06-10 21:41:32

+1

主要是,相同的委託類型「事件」可以反覆重複使用。你也可以在任何地方舉辦一個類型的公共活動,通過任何發件人,但這不太常見。 – 2009-06-10 21:46:29

相關問題