Стек вызовов реализован x86 системой команд и операционной системой.
Инструкции как нажатие и поп корректируют указатель вершины стека, в то время как операционная система заботится о выделении памяти, когда стек растет для каждого потока.
то, что стопка x86 "углубляется" от выше для понижения адресов, делает эту архитектуру больше восприимчивый к атаке переполнения буфера.
Обновление: переписанный ответ
По-видимому, хотя я не могу найти исчерпывающий источник по этому вопросу, важен фактический класс. Это имеет смысл, если учесть, что NHibernate использует отражение для поиска базового типа. Кроме того, когда отображение загружено, оно украшает ваши типы, поэтому в основном они становятся совершенно разными типами (вы можете увидеть это, когда наведете на них курсор во время отладки).
Этот принцип в основном предотвращает наследование с понижающим преобразованием, поскольку ваш производный тип не нанесен на карту, не украшен и, следовательно, неизвестен. Если вам нужно использовать наследование, у вас есть несколько вариантов:
Все эти методы довольно громоздки. Если ваш дизайн позволяет это, вместо наследования используйте частичные классы или методы расширения. Последнее - то, что я нахожу в своих собственных проектах, по-видимому, я уже сталкивался с этим раньше и сделал обычай использовать методы расширения.