簡體   English   中英

對事件使用對象類型而不是實際類型的原因是什么?

[英]What's the reason of using the Object type instead of an actual type for events?

我說的是事件的通用簽名:

Event ( object, args );

那么為何不:

Event ( ImageProcessor, args );

#1是否還會帶來性能成本以及不清楚?

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

我認為這是由於歷史原因加上避免代碼重復的原因。

在.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窗體設計器是否可以使用通用EventHandler。 我從來沒有嘗試過測試。

在我看來,類型化(通用)事件比該標准要好。 因此,請盡可能使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM