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
具有相同的方法签名。然而 Line#2 编译得很好(发挥逆变性),但 Line#3 因隐式类型转换错误失败而失败。一个简单的例子,我直观地理解为什么 Line#3 会发生编译错误,但我无法通过某种形式的解释来解决这个问题。任何人都可以提出一个很好的理解来解释差异吗?