Добрый день. Помогите разобраться с теорией. В книге говорится, что для каждого класса в программе компилятор создает конструктор по умолчанию, который инициализирует поля класса значениями по умолчанию (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
-значения до начала пробега конструктора.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В дизайнере пытаюсь создать NavigationView или PersonPicture но они подчёркиваются и вот какие ошибки:
Понятного объяснения предназначения содержимого этого пространства имён в сети я не обнаружилНа сколько я понимаю, классы, представленные...
Видел куски кода на c#, но не особо шарю в этомМожете объяснить на пальцах, как это реализовать?