-
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 поля;
- Поля и свойства;
- Конструкторы и деструкторы;
- Методы.
- В каждой группе элементы должны быть в следующем порядке:
publicinternalprotected internalprotectedprivate
- По возможности группировать реализации интерфейсов
- Члены класса в таком порядке:
- Отступ - 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 (...)для всего, что длиннее одного утверждения.