Возьмите следующее:
class A {}
class B : A {}
class C
{
    C()
    {
        var b = new B();
        Foo(b);
        Foo2(ref b); // <= compile-time error: 
                     // "The 'ref' argument doesn't match the parameter type"
    }
    void Foo(A a) {}
    void Foo2(ref A a) {}  
}
Почему возникает ошибка, связанная с компиляцией? Это происходит с аргументами ref и out.
