Например есть такой класс(к примеру)
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 на экземпляре вашего класса. Как аргумент передан указатель на экземпляр вашего класса.
Комментариев нет:
Отправить комментарий