Документация для конструкторов C # на самом деле немного плохо сформулирована. Там написано:
Если класс не имеет конструктора, конструктор без параметров генерируется автоматически. и значения по умолчанию используются для инициализации полей объекта. Например, int инициализируется как 0.
" и " здесь, кажется, указывают, что это происходит только в том случае, если вы не предоставляете конструктор, а затем ... что происходит? ... если вы предоставите конструктор?
Ответ заключается в том, что все поля экземпляра инициализируются. Независимо от наличия конструктора, определенного разработчиком, по умолчанию или в противном случае.
На самом деле не конструктор (-ы) инициализируют поля по умолчанию, т.е. 0 для числовых полей, null
для ссылок и т. Д.
Это делается оператором new
, до задействования конструкторов .
Если у вас есть этот класс:
public class Test
{
public int Field;
}
Тогда никакой конструктор не будет специально хранить что-либо в поле Field
, оно будет инициализировано равным 0, когда память будет выделена для экземпляра.
Если вместо этого у вас есть этот конструктор:
public Test()
{
Field = 42;
}
или у вас есть это объявление поля:
public int Field = 42;
(что составляет одно и то же)
Тогда, когда вы создаете экземпляр этого типа, происходит выделение памяти, и значение 0 , что установит начальное значение для Field
в 0, а затем конструктор будет вызвано, что установит поле в 42.