我談論事件共同特徵:對事件使用對象類型而不是實際類型的原因是什麼?
Event (object, args);
,爲什麼不:
Event (ImageProcessor, args);
是#1導致性能成本太高,與正在沿着不清?
我談論事件共同特徵:對事件使用對象類型而不是實際類型的原因是什麼?
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窗體設計器可以hadle泛型EventHandler。我從來沒有試過去測試它。
在我看來,鍵入(通用)事件比這個標準更好。所以儘可能地使用它。
因爲一個事件可以由多個不同的對象/類型引發,所以在編譯時可能不知道類型。
謝謝喬爾。你是指不同類型使用的相同事件?我以爲他們會有自己的獨立事件? – 2009-06-10 21:41:32
主要是,相同的委託類型「事件」可以反覆重複使用。你也可以在任何地方舉辦一個類型的公共活動,通過任何發件人,但這不太常見。 – 2009-06-10 21:46:29