#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 это не тип, это указатель на то, что в результате работы метода не следует ждать значения и пытаться его куда-то записать. По сути, конструктор - тот же метод, что и любой другой. Он ничего не возвращает, его отработка происходит при создании объекта этого типа. Сначала создаются поля объекта или, как еще их называют, переменные типа, затем выполняется конструктор.
Комментариев нет:
Отправить комментарий