Luffy1
@Luffy1
Студент, Junior .NET programmer

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

Есть код:
class A
{

}
class B : A
{

}


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

Также, если мы в методе Main напишем B b = new B();, то у нас сначала вызовется статический конструктор в классе B, потом статический конструктор в классе A, потом динамический конструктор в классе A, и динамический конструктор класса В. Почему у нас вызывается динамический конструктор класса А? Мы ведь не создаём объект класса А. Что происходит под капотом, когда вызывается динамический конструктор класса А. Почему это происходит? В книге Рихтера я об этом ничего не нашёл.
  • Вопрос задан
  • 108 просмотров
Решения вопроса 3
mindtester
@mindtester Куратор тега C#
движение жизнь!.. а ожидание - нет
ни как. это записано в тексте программы, а последовательность вызовов строит компилятор
ps
если мы в методе Main напишем B b = new B();, то у нас сначала вызовется статический конструктор в классе B, потом статический конструктор в классе A, потом динамический конструктор в классе A, и динамический конструктор класса В.
а над статикой не заморачивайтесь вообще, пока хорошенько не поймете что это такое. это не очень понятно на начальных этапах изучения, и это точно не надо учитывать, пока не дойдете до необходимости создания собственных переопределений статических конструкторов
Ответ написан
@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 выкладывают записи с выступлений. Но повторюсь вам ещё рано туда залезать, направьте свои силы на изучение базы. Да и чтобы под капот лезть, необходимо, хотя бы минимальное, знание архитектуры ПК, знание ассемблера, устройства памяти, процессов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 110 000 до 150 000 ₽
BRIO MRS Казань
от 70 000 до 120 000 ₽
СМАРТ-СОФТ Волгоград
от 60 000 до 90 000 ₽