Na jakiej zasadzie typ string jest typem referencyjny? Tylko dlatego, że tablica jest typem referencyjnym? No bo co to za typ referencyjny, do którego trzeba używać ref?
Ponadto
string s = "abc";
string ss = "abc";
Console.WriteLine(Object.ReferenceEquals(s,ss));
Zwraca true ponieważ jeżeli stringi mają taką samą wartość, to wtedy wskazują na ten sam adres?