Ссылочные типы [C#, .NET 4.5]

Почему string является ссылочным типом?
Так решили разработчики языка.
А то судя по его поведению он "тип значений"
О каком поведении вы говорите? Строки в C# являются не изменяемыми, каждый метод, "изменяющий" строку на самом деле создает новую и возвращает ее. Возможно это вводит вас в заблуждение.
Где найти стандарты кодинга C#. 
Если вы о стандарте (спецификации) языка, то тут:
https://www.google.ru/#newwindow=1&q=C%23+standard...
Привет, по поводу строк в .net очень хорошо писали/переводили ребята на хабре:
habrahabr.ru/post/165597
habrahabr.ru/post/172627
Если вкратце - string это ссылочный тип с множеством переопределенных операций. Самой главной особенностью является создание новой строки при каждой операции (как у значимых типов), что нужно помнить при разработке. Во второй статье еще описан очень занятный механизм .net - интернирование строк. Неизменяемость строк ставит вопрос об их эффективной конкатинации, на который отвечает тот самый Джон Скит: www.yoda.arachsys.com/csharp/stringbuilder.html
По стандартам кодирования, если речь идёт о стиле, есть советы самих MS: msdn.microsoft.com/en-us/library/ff926074.aspxResharper  в своей стандартной конфигурации во многом повторяет эти советы и для выработки хорошего стиля можно рекомендовать стараться делать "зеленый" код по решарперу. Исключение составляет то, что решарпер любит сворачивать выражения foreach в цепочки вызовов LINQ, что очень негативно скажется на поддерживаемости и отлаживаемости кода. 
Напоследок скажу, что по