Qu'est-ce que l'utilisation de “ref” pour la référence de type de variables en C#?

Je comprends que si je passe une valeur de type (int, struct, etc.) comme un paramètre (sans les ref mot-clé), une copie de cette variable est passée à la méthode, mais si j'utilise le ref mot-clé une référence à cette variable est passée, pas une nouvelle.

Mais avec référence-types, comme les classes, même sans le ref mot-clé, une référence est passé à la méthode, pas une copie. Alors, quelle est l'utilisation de la ref mot-clé de référence-types?


Prendre pour exemple:

var x = new Foo();

Quelle est la différence entre la suivante?

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

et

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