Инициализаторы
2017 год
Инициализируйте поля класса в конструкторе. Исключениями являются статические и константные поля.
Пример:
Для чего именно так? Все просто! При отладке и выполнении команды "Шаг с заходом" в конструктор вам не придется "прошагать" все инициализаторы класса, а сразу попадете непосредственно в код конструктора. Это поведение будет соответствовать выполнению команды "Шаг с заходом" как для любой другой функции.
internal class A { // Так нельзя: private int _var1 = 0; // Так тоже: protected DateProperty _var2 = new DateProperty(); // Надо так: public A() { _var3 = 0; _var4 = new DateProperty(); } private int _var3; protected DateProperty _var4; }Учитывая исключения, правильное использование инициализаторов в следующем примере:
public class B { // Статические поля инициализируйте при объявлении. private static int _var1 = 0; protected static DateProperty Date = new DateProperty(); // Константные поля инициализируйте при объявлении. public const int One = 1; public B() { Pi = 3.14; _var2 = 2; } // Readonly поля инициализируйте в конструкторе! public readonly double Pi; // Экземплярные поля инициализируйте в конструкторе! private int _var2; }Это правило, может показаться, идет в разрез рекомендации "Локальные переменные | 9. Инициализируйте переменные при объявлении, если это возможно". Но! Уточнение касается именно полей класса. Что же касается локальных переменных, то рекомендация (Локальные переменные | 9. Инициализируйте переменные при объявлении, если это возможно) остается в силе.
Для чего именно так? Все просто! При отладке и выполнении команды "Шаг с заходом" в конструктор вам не придется "прошагать" все инициализаторы класса, а сразу попадете непосредственно в код конструктора. Это поведение будет соответствовать выполнению команды "Шаг с заходом" как для любой другой функции.