C#ではstring型は参照型なのでなのですがその参照型にrefを使うと内部的にはどのような処理になっているのでしょうか?refは参照を渡すという意味なのですが参照型に参照を渡すとどうなるのでしょうか?実験してしてもエラーにもならずなおかつ実行内容を同じためどのような処理をしているかわかりません、教えてくれますでしょうか?

1,質問なのですがc++の int a; &aといった書き方の&も参照を渡してるという意味ですが
それと大体同じなのでしょうか?

static void Main(string[] args)
{
    del_addS add = (ref string a, ref string b) =>
    {
        return a + b;
    };

    del_addS add2 = delegate (ref string x,ref string y)
    {
        return x + y;
    };

    del_add adds = delegate (string x, string y)
    {
        return x + y;
    };

    string aa = Console.ReadLine();
    string bb = Console.ReadLine();

    //string s = add(ref aa,ref bb);
    //string s = add2(ref aa,ref bb);
    string s = adds(aa,bb);
    Console.WriteLine(s);



    Console.ReadKey();
}