看着这个代码逆变和方法签名?
delegate void StringAction (string s);
class Test
{
static void Main()
{
StringAction sa = new StringAction (ActOnObject);
sa ("hello");
}
static void ActOnObject (object o)
{
Console.WriteLine (o); // hello
}
}
这是代码工作由于逆变? (MoreDeriverdRef < == LessDerivedRef)
或因为
(无关逆变) - 在C#我可以ActOnObject ("lalala")
你的第二点是有关逆变服用。 – Jodrell
@Jodrell为什么?你可以在接受动物的方法上执行dowork(myHorse).....而我不是在谈论委托人....只是正常的方法 –
但那是因为方法调用是逆变的,我们习惯了它。它使多态性的工作。 – Jodrell