Добрый день. Помогите разобраться с теорией. В книге говорится, что для каждого класса в программе компилятор создает конструктор по умолчанию, который инициализирует поля класса значениями по умолчанию (0, null, false). Но если создать свой конструктор вручную, то компилятор не будет создавать конструктор по умолчанию. Есть код:
namespace Parameters
{
class WrappedInt
{
public int Number;
public WrappedInt(int a)
{
}
}
}
Создан конструктор с параметрами, поэтому, как я понимаю, конструктор по умолчанию не будет создан автоматически. Следовательно поле Number не будет инициализировано значением по умолчанию, так как не будет создано default-конструктора, который инициализирует поля класса такими значениями. Поэтому при обращении к полю должна быть ошибка, но при выводе значения поля в консоль получаем 0. Почему так происходит? Действительно ли инициализация default-значениями происходит в конструкторе по умолчанию? Спасибо заранее за помощь.
Дело в том, что при выделении памяти она обнуляется.
.NET устроен так, что default-значение каждого типа состоит из нулей в битовом представлении. Поэтому все значения окажутся инициализированы default-значением.
Документация:
If T is a class_type:
T is allocated. If there is not enough memory available to allocate the new instance, a System.OutOfMemoryException is thrown and no further steps are executed.this.Мы видим, что хоть обнуление памяти и не требуется по стандарту, тем не менее требование состоит в том, что все поля получают default-значения до начала пробега конструктора.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости