DEA7H
@DEA7H
.NET/C#/ASP.NET MVC Developer

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

Здравствуйте.

Решил поработать в режиме "Как это работает?".

Наткнулся на проблемы на которые не могу найти ответы в книге.
1) Почему string является ссылочным типом? А то судя по его поведению он "тип значений"... PS: Если можно по подробнее и с примерами.
2) Где найти стандарты кодинга C#. Как мы знаем в PHP есть PHP-FIG -> PSR-0, PSR-1, PSR-2, PSR-3, PSR-4... Например в PSR-2 нам говорится о Coding Style Guide. Вот что-то подобное хотелось бы увидеть для C#.

Заранее благодарен.
  • Вопрос задан
  • 3419 просмотров
Решения вопроса 2
MikhailD
@MikhailD
Developer

Почему string является ссылочным типом?

Так решили разработчики языка.


А то судя по его поведению он "тип значений"

О каком поведении вы говорите? Строки в C# являются не изменяемыми, каждый метод, "изменяющий" строку на самом деле создает новую и возвращает ее. Возможно это вводит вас в заблуждение.


Где найти стандарты кодинга C#.

Если вы о стандарте (спецификации) языка, то тут:
https://www.google.ru/#newwindow=1&q=C%23+standard...
Ответ написан
Комментировать
Vadimyan
@Vadimyan
Программист C#
Привет, по поводу строк в .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.aspx
Resharper в своей стандартной конфигурации во многом повторяет эти советы и для выработки хорошего стиля можно рекомендовать стараться делать "зеленый" код по решарперу. Исключение составляет то, что решарпер любит сворачивать выражения foreach в цепочки вызовов LINQ, что очень негативно скажется на поддерживаемости и отлаживаемости кода.

Напоследок скажу, что по
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы