Задать вопрос
Luffy1
@Luffy1
Student, Junior .NET programmer, C#, JS, HTML/CSS

Как в куче показано или записано, что, например, класс В наследуется от класса А?

Есть код:
class A
{

}
class B : A
{

}


So, как в куче помечено, что класс B унаследован от класса А?

Также, если мы в методе Main напишем B b = new B();, то у нас сначала вызовется статический конструктор в классе B, потом статический конструктор в классе A, потом динамический конструктор в классе A, и динамический конструктор класса В. Почему у нас вызывается динамический конструктор класса А? Мы ведь не создаём объект класса А. Что происходит под капотом, когда вызывается динамический конструктор класса А. Почему это происходит? В книге Рихтера я об этом ничего не нашёл.
  • Вопрос задан
  • 112 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 3
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
ни как. это записано в тексте программы, а последовательность вызовов строит компилятор
ps
если мы в методе Main напишем B b = new B();, то у нас сначала вызовется статический конструктор в классе B, потом статический конструктор в классе A, потом динамический конструктор в классе A, и динамический конструктор класса В.
а над статикой не заморачивайтесь вообще, пока хорошенько не поймете что это такое. это не очень понятно на начальных этапах изучения, и это точно не надо учитывать, пока не дойдете до необходимости создания собственных переопределений статических конструкторов
Ответ написан
ayazer
@ayazer
Sr. Software Engineer
So, как в куче помечено, что класс B унаследован от класса А?

это настолько нюанс, что вспомнить сложно даже если надо. когда вы создаете объект - в куче выделяется место под структуру данных. В ней записана метаинформация (гуглить по EEClass) и потом идет таблица с адресами методов. Вот вам куда-то в кишки EEClass залазить надо, в оф. документации точно было детальное описание.

вот можно начать отсюда https://docs.microsoft.com/en-us/archive/msdn-maga...

Почему это происходит?

потому что-то конструктор класса А может инициализировать поля которые потом нужны конструктору класса B.
Ответ написан
yarosroman
@yarosroman Куратор тега C#
C# the best
Базовый класс можно даже через рефлексию вытащить можно. По нескольким последним вопросам, я думаю, вы не туда копаете, не понимая многих базовых принципов. Рано вам ещё под капот лезть. Ну и у Рихтера вы не найдете ничего про внутренности, не смотря на очень громкое название. Ну если уж и очень охота под капот залезть, поищите Станислава Сидристого книгу, он ее на гитхаб выложил, Саши Гольдштейна, оптимизация .net приложений, есть конференция dotnext, они на канале yt выкладывают записи с выступлений. Но повторюсь вам ещё рано туда залезать, направьте свои силы на изучение базы. Да и чтобы под капот лезть, необходимо, хотя бы минимальное, знание архитектуры ПК, знание ассемблера, устройства памяти, процессов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы