4
static void HandleDemoEvent(object sender, EventArgs e)
{
Console.WriteLine("bla-bla");
}
static void Main(string[] args)
{
EventHandler handler;
MouseEventHandler mouseHandler;
handler = HandleDemoEvent; //Line#1 - Compile OK
mouseHandler = HandleDemoEvent; //Line#2 - Compile OK
mouseHandler = handler; //Line#3 Compile Error 1 Cannot implicitly convert type 'System.EventHandler' to 'System.Windows.Forms.MouseEventHandler'
}
兩個EventHandler
委託類型和我自己的HandleDemoEvent
方法具有相同的方法簽名。然而,第2行編譯良好(在播放時反轉),但第3行失敗,失敗的隱式類型轉換錯誤。一個簡單的例子,我直觀地理解爲什麼編譯錯誤發生在第3行,但我無法用某種形式的解釋來解決它。任何人都可以提出一個很好的理解來解釋差異嗎?分配兼容性,逆變和隱式類型轉換
「委託協同/逆變只適用於當您從方法構建委託時」 - 不知道。它解決了這個問題,其餘的都是微不足道的。謝謝:) – Trogvar 2012-08-14 10:38:34
我想重要的部分是,前兩行正在做一些根本不同於最後一行:) – Rawling 2012-08-14 10:47:05