Страницы

Поиск по вопросам

вторник, 6 ноября 2018 г.

Конструктор классов

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

Комментариев нет:

Отправить комментарий