Как инициализируются поля, если вы не предоставляете конструктор самостоятельно?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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