參數協變、回傳值逆變,符合多態直覺。
void PrintOutput(object thing) { if (thing != null) Console.WriteLine(thing); }
PrintOutput(5); // int → object 協變
PrintOutput("hello"); // string → object 協變
object value = SomeMethod(); // 回傳值逆變:衍生型別指派給基底型別變數
陣列、.NET 1.x 集合(ArrayList)支援協變/逆變但不安全;泛型集合(.NET 2.0+)為不變,編譯期保證型別安全。本系列將深入探討原因與 C# 4.0 的改進。