Typ referencyjny łańcucha C #?

Wiem, że „ciąg” w C # jest typem odniesienia. To jest w MSDN. Jednak ten kod nie działa tak jak powinien:

class Test
{
    public static void Main()
    {
        string test = "before passing";
        Console.WriteLine(test);
        TestI(test);
        Console.WriteLine(test);
    }

    public static void TestI(string test)
    {
        test = "after passing";
    }
}

Wyjście powinno być „przed przekazaniem” „po przejściu”, ponieważ przekazuję ciąg jako parametr i jako typ odniesienia, druga instrukcja wyjścia powinna rozpoznać, że tekst zmienił się w metodzie TestI. Otrzymuję jednak „przed przekazaniem” „przed przekazaniem”, co sprawia, że ​​wydaje się, że jest przekazywana przez wartość nie przez ref. Rozumiem, że ciągi są niezmienne, ale nie rozumiem, jak to wyjaśniłoby, co tu się dzieje. czego mi brakuje? Dzięki.