Разработчику > Инициализаторы

Инициализаторы

Инициализируйте поля класса в конструкторе. Исключениями являются статические и константные поля.
Пример:
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. Инициализируйте переменные при объявлении, если это возможно) остается в силе.

Для чего именно так? Все просто! При отладке и выполнении команды "Шаг с заходом" в конструктор вам не придется "прошагать" все инициализаторы класса, а сразу попадете непосредственно в код конструктора. Это поведение будет соответствовать выполнению команды "Шаг с заходом" как для любой другой функции.