Например есть такой класс(к примеру)
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.
Как это объяснить?
Возвращаемый тип void, это разве не отсутсвие возвращаемого значения? Конструктор в .NET вызывается как метод класса. В вашем примере выше вызывается базовый конструктор типа System.Object:
ldarg.0
Загружается первый аргумент метода в стек. Все не статические методы неявно имеют первый параметр - указатель на экземпляр объекта
call instance void [mscorlib]System.Object::.ctor()
Вызывает контруктор System.Object на экземпляре вашего класса. Как аргумент передан указатель на экземпляр вашего класса.
Void это не тип, это указатель на то, что в результате работы метода не следует ждать значения и пытаться его куда-то записать. По сути, конструктор - тот же метод, что и любой другой. Он ничего не возвращает, его отработка происходит при создании объекта этого типа. Сначала создаются поля объекта или, как еще их называют, переменные типа, затем выполняется конструктор.
Продвижение своими сайтами как стратегия роста и независимости