Поскольку в обоих случаях вы должны иметь возможность присвоить значение параметру ref / out.
Если вы попытаетесь передать b в метод Foo2 в качестве ссылки, а в Foo2 вы попытаетесь определить a = new A (), это будет недействительным. По той же причине, которую вы не можете написать:
B b = new A();