Рассмотрим:
class C : A {} class B : A {} void Foo2(ref A a) { a = new C(); } B b = null; Foo2(ref b);
Это нарушит безопасность типа