namespace CSharpStudy
{
class EventSample
{
public event MyEventHandler SomeEvent;
public void OnSomeEvent()
{
if (SomeEvent != null)
{
SomeEvent(new ChildClass());
}
}
}
class BaseClass { }
class ChildClass : BaseClass { }
delegate BaseClass MyEventHandler(ChildClass cc);
class Program
{
static int Main(string[] args)
{
EventSample es = new EventSample();
es.SomeEvent += delegate(ChildClass bc)//正常
{
Console.WriteLine("this is a third event sample");
return new ChildClass();
};
es.SomeEvent += (BaseClass bc) =>//产生错误了
{
Console.WriteLine("this is a third event sample");
return new ChildClass();
};
es.SomeEvent += Program.handler;//正常
es.OnSomeEvent();
Console.ReadLine();
return 0;
}
static ChildClass handler(BaseClass bc)
{
Console.WriteLine("this is a third event sample");
return new ChildClass();
}
}
}
在委托中用了匿名方法和lambda表达式,不知脑子一热 想试一下 协变和逆变,结果 以显示定义的方法的逆变可以正常,而匿名方法和lambda表达式实现的逆变完全不行(编译不通过),不管那种方式 协变 都是正常的,这到底是为什么呢?求解释!!!