Код: Выделить всё
//CodeSample1
//declare class fileds but not initialize them.
public class Cat
{
public int Age;
public string Name;
}
Cat aCat = new Cat();
Как инициализируются поля? Приведенный выше код просто объявляет поля, а не инициализирует их.
Если вы не предоставляете конструктор для своего объекта, 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();
Я знаю, что результат соответствует ожиданиям. Но не понимаю, как это работает.
Поля инициализируются непосредственно перед вызовом конструктора экземпляра объекта. (Из документа Microsoft 2)
Объедините документ Microsoft 1 и документ Microsoft 2, CodeSample1 и CodeSample2 должны дать одинаковые результаты (я знаю, это странно).
Насколько я понимаю, в CodeSample2 сначала поле Age инициализируется значением 4, затем вызывается сгенерированный компилятором конструктор по умолчанию и устанавливается значение возраста по умолчанию (0).< /p>
Возможно, я неправильно понял документы или документы в чем-то неверны?
Если есть более точные документы, покажите пожалуйста.
Подробнее здесь: https://stackoverflow.com/questions/415 ... y-yourself
Мобильная версия