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 でコンパイル エラーが発生する理由は直感的に理解できますが、形式的な説明で解決することはできません。違いを説明するのに十分な理解を思いつくことができますか?