Why aren't reference types polymorphic?
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“;
}
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]