Как инициализируются поля, если вы не предоставляете конструктор самостоятельно?C#

Место общения программистов C#
Anonymous
Как инициализируются поля, если вы не предоставляете конструктор самостоятельно?

Сообщение Anonymous »

Код: Выделить всё

//CodeSample1
//declare class fileds but not initialize them.
public class Cat
{
public int Age;
public string Name;
}

Cat aCat = new Cat();
Проверьте результат: aCat.Age — 0, aCat.Name — null.

Как инициализируются поля? Приведенный выше код просто объявляет поля, а не инициализирует их.

Если вы не предоставляете конструктор для своего объекта, C# по умолчанию создаст его, который создаст экземпляр объекта. и устанавливает для переменных-членов значения по умолчанию, указанные в таблице значений по умолчанию.(Из документа Microsoft 1)

Таким образом, компилятор генерирует поля инициализации конструктора по умолчанию. Верно?

Изменен код, инициализируйте поля при их объявлении.

Код: Выделить всё

//CodeSample2
//declare class fields and initialize them at same time.
public class Cat
{
public int Age = 4;
public string Name = "Black";
}

Cat aCat = new Cat();
На этот раз результат: aCat.Age — 4, а aCat.Name — «Black».

Я знаю, что результат соответствует ожиданиям. Но не понимаю, как это работает.

Поля инициализируются непосредственно перед вызовом конструктора экземпляра объекта. (Из документа Microsoft 2)

Объедините документ Microsoft 1 и документ Microsoft 2, CodeSample1 и CodeSample2 должны дать одинаковые результаты (я знаю, это странно).

Насколько я понимаю, в CodeSample2 сначала поле Age инициализируется значением 4, затем вызывается сгенерированный компилятором конструктор по умолчанию и устанавливается значение возраста по умолчанию (0).< /p>

Возможно, я неправильно понял документы или документы в чем-то неверны?

Если есть более точные документы, покажите пожалуйста.

Подробнее здесь: https://stackoverflow.com/questions/415 ... y-yourself

Вернуться в «C#»