#c_sharp #net
Например есть такой класс(к примеру)
public class Person
{
public int Age { get; set; }
public string Name { get; set; }
public Person()
{
Age = 10;
Name = "Nick";
}
}
Вот мне что интересно я когда начал изучать программирование мне говорили что для
конструктора класса не используется понятие возвращаемый тип,по той причине что конструктор
работает всякий раз когда создается объект этого класса и поскольку тип объекта эта
тип класса тогда нету смысла для конструктора написать тип возвращаемого значения(или
я что не так понял?),и мне это не так и интересовал и я не стал искать ответов.
Но не давно начал изучать книгу Рихтера(CLR via C#) и при просмотре IL кода увидел
вот такое
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 8 (0x8)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: nop
IL_0007: ret
} // end of method Program::.ctor
Если я не ошибаюсь эта "instance void" часть значит что у конструктора привязан
возвращаемый тип void.
Как это объяснить?
Ответы
Ответ 1
Возвращаемый тип void, это разве не отсутсвие возвращаемого значения? Конструктор в .NET вызывается как метод класса. В вашем примере выше вызывается базовый конструктор типа System.Object: ldarg.0 Загружается первый аргумент метода в стек. Все нестатические методы неявно имеют первый параметр - указатель на экземпляр объекта call instance void [mscorlib]System.Object::.ctor() Вызывает контруктор System.Object на экземпляре вашего класса. Как аргумент передан указатель на экземпляр вашего класса.Ответ 2
Void это не тип, это указатель на то, что в результате работы метода не следует ждать значения и пытаться его куда-то записать. По сути, конструктор - тот же метод, что и любой другой. Он ничего не возвращает, его отработка происходит при создании объекта этого типа. Сначала создаются поля объекта или, как еще их называют, переменные типа, затем выполняется конструктор.
Комментариев нет:
Отправить комментарий