Q: Why aren't reference types polymorphic?
A: Consider the following code:
using System;class Dog { public string Name;}class Test{ public static void Swap(ref object a, ref object b) { object temp; temp = a; a = b; b = temp; } public static void Main() { Dog d1 = new Dog(); d1.Name = "fido"; Dog d2 = new Dog(); d2.Name = "rex"; Swap(ref d1, ref d2); } }
The compiler will report an error on the call to the Swap() function. Why? Consider if the swap function was like this:
public static void Swap(ref object a, ref object b) { a = 5; b = “Hello“; }
public static void Swap(ref object a, ref object b) {
a = 5;
b = “Hello“;
}
If the compiler allowed this code, it would mean assigning a boxed int to a Dog object, which is clearly not type safe.
[Author: Eric Gunnerson]