O que é o uso de "ref" para variáveis do tipo de referência em C #?

Entendo que se eu passar um tipo de valor int, struct, etc.) como um parâmetro (sem oref keyword), uma cópia dessa variável é passada para o método, mas se eu usar oref palavra-chave, uma referência a essa variável é passada, não uma nov

Mas com tipos de referência, como classes, mesmo sem oref keyword, uma referência é passada para o método, não uma cópia. Então, qual é o uso doref palavra-chave com tipos de referência?

Considere por exemplo

var x = new Foo();

Qual é a diferença entre o seguinte?

void Bar(Foo y) {
    y.Name = "2";
}

void Bar(ref Foo y) {
    y.Name = "2";
}

questionAnswers(20)

yourAnswerToTheQuestion