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

237
18 августа 2017, 23:18

Например есть такой класс(к примеру)

 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.
Как это объяснить?

Answer 1

Возвращаемый тип void, это разве не отсутсвие возвращаемого значения? Конструктор в .NET вызывается как метод класса. В вашем примере выше вызывается базовый конструктор типа System.Object:

ldarg.0

Загружается первый аргумент метода в стек. Все не статические методы неявно имеют первый параметр - указатель на экземпляр объекта

call instance void [mscorlib]System.Object::.ctor()

Вызывает контруктор System.Object на экземпляре вашего класса. Как аргумент передан указатель на экземпляр вашего класса.

Answer 2

Void это не тип, это указатель на то, что в результате работы метода не следует ждать значения и пытаться его куда-то записать. По сути, конструктор - тот же метод, что и любой другой. Он ничего не возвращает, его отработка происходит при создании объекта этого типа. Сначала создаются поля объекта или, как еще их называют, переменные типа, затем выполняется конструктор.

READ ALSO
DualListbox js как очищать

DualListbox js как очищать

как очищать DualListbox перед каждым открытием модального окна? у меня мои данные накапливаются сейчас

338
альтернатива метода find js?

альтернатива метода find js?

что можно использовать в качестве альтернативы метода find js?

331
MobX: Пример регистрации пользователя

MobX: Пример регистрации пользователя

Приведите, пожалуйста, пример отправки данных на сервер из формы с помощью Rect + MobXИзучаю MobX для управления состоянием React приложения и необходим...

299