看着這個代碼逆變和方法簽名?
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