-
Notifications
You must be signed in to change notification settings - Fork 0
CodeStyle
Smirnov Ivan edited this page Jul 27, 2022
·
1 revision
- Классы, методы, публичные поля, публичные свойства, namespaces: PascalCase;
- Локальные переменные, параметры, названия
protected
,internal
иprotected internal
полей и свойств: camelCase; - Названия private полей и свойств:
_camelCase
; - Наименования не зависят от модификаторов
static
,readonly
, и т.д. - Наименования
const
заглавными буквами через нижнее подчеркивание MAXIMUM_LENGHT - Названия интерфейсов начинаются с заглавной I, например
IInterface
;
- Названия папок и файлов в PascalCase, например
MyFile.cs
; - По возможности название файла должно совпадать с именем главного класса в этом файле, e.g. MyClass.cs;
- В общем, стараться чтобы на один файл был один главный класс;
- Модификаторы в порядке:
public protected internal private new abstract virtual override sealed static readonly extern unsafe volatile async
; Модификаторы обязательно писать - Использование пространств имен (секция
using
) перед объявлением namespace. using в алфавитном порядке, не считаяSystem
, они всегда идут первыми; - Порядок членов класса:
- Члены класса в таком порядке:
- Вложенные классы, структуры, enums, делегаты и события;
- Статические, константы и readonly поля;
- Поля и свойства;
- Конструкторы и деструкторы;
- Методы.
- В каждой группе элементы должны быть в следующем порядке:
public
internal
protected internal
protected
private
- По возможности группировать реализации интерфейсов
- Члены класса в таком порядке:
- Отступ - 4 пробела;
- Символ переноса строки - LF;
- Фигурные скобки всегда с новой строки;
- Использовать фигурные скобки, даже когда это опционально;
- Пробел после if/for/while etc., и после запятых;
- Нет пробела после открывающей и перед закрывающей круглых скобок;
- Нет пробела между унарным оператором и его операндом. Один пробел между оператором и каждым операндом всех остальных операторов
- Длина строки кода ограничена шириной редактора (примерно 2/3 ширины экрана). Если строка не влезает - переносить на следующую с отступом в 4 пробела
- При объявлении методов (конструкторов), принимающих больше двух параметров, или если такое объявление не помещается в одну строку, второй и последующий аргументы переносить на новую строку
- По возможности группировать код внутри метода на логические части (слишком малые для вынесения в отдельный метод) с помощью пустых строк, чтобы избежать "длинных простыней кода"
- По возможности стараться уместить код одного метода в длину одного листинга (высота экрана)
- Ограничения для обобщённых методов (
where T: class
) указывать на следующей строке после объявления метода - Комментарии оставлять на отдельной строке перед комментируемым кодом (не в конце строки). Отделять слэши от текста комментария пробелом (
// comment
вместо//comment
). В комментариях помнить правила русского языка - начинать с заглавной буквы, ставить в конце точку; - При использовании Method Chaining (в т.ч. LINQ) каждый новый метод начинать с новой строки;
- Атрибуты должны быть над сущностью с которой они связаны, каждый атрибут с новой строки;
- Для определений и вызовов методов, если не все аргументы помещаются в одну строку, их следует разбить на несколько строк, при этом каждая последующая строка выровнена с первым аргументом. Если для этого недостаточно места, аргументы могут быть размещены в последующих строках с отступом в четыре пробела.
- При объявлении переменных использовать ключевое слово
var
вместо явного указания типа там, где это возможно; - При инициализации пустых строк и массивов использовать
string.Empty
иArray.Empty
вместо""
иnew[]{}
; - Использовать
switch/case
вместо множестваif
; - По возможности использовать DI, при написании новых классов выделять интерфейсы.
- Все члены Enum'ов должны явным образом нумероваться, начиная с 0:
public enum Color { Red = 0, Blue = 1, Green = 190 }
- Если переменную или поле можно сделать константой - оно должно быть константой;
- Если не получается с константой, можно попробовать readonly как альтернативу;
- Лучше именованные константы, чем "магические числа" в коде.
- Предпочитайте методы расширения элементов, ключевым словам LINQ в стиле SQL. Например: используйте
myList.Where(x)
вместоmyList where x
; - Избегайте использования
Container.ForEach (...)
для всего, что длиннее одного утверждения.