Это, вероятно, неправильно в эзотерическом смысле, но для простоты:
Типы значений - это значения, которые обычно передаются «по значению» (поэтому копируем их).Ссылочные типы передаются «по ссылке» (поэтому указатель указывает на исходное значение).По стандарту .NET ECMA нет никакой гарантии того, где эти «вещи» сохраняются.Вы можете создать реализацию .NET без стеков или без кучи (вторая будет очень сложной, но вы, вероятно, могли бы использовать волокна и множество стеков)
Структуры имеют тип значения (int, bool... являются структурами или, по крайней мере, имитируются как ...), классы являются ссылочными типами.
Типы значений происходят от System.ValueType.Тип ссылки происходит от System.Object.
Сейчас .. В конце концов, у вас есть тип значения, «объекты ссылки» и ссылки (в C ++ они будут называться указателями на объекты. В .NET они непрозрачны. Мыне знаю, что они. С нашей точки зрения, они являются «ручками» для объекта).Эти последние аналогичны типам значений (они передаются копией).Таким образом, объект состоит из объекта (ссылочный тип) и нуля или более ссылок на него (которые похожи на типы значений).Когда имеется ноль ссылок, GC, вероятно, соберет его.
В общем случае (в реализации по умолчанию в .NET) тип значения может идти в стеке (если это локальные поля) или в куче.(если они являются полями класса, если они являются переменными в функции итератора, если они являются переменными, на которые ссылается замыкание, если они являются переменными в асинхронной функции (с использованием более новой Async CTP) ...).Приведенное значение может идти только в кучу.Ссылки используют те же правила, что и типы значений.
В случаях типа значений, которые идут в кучу, потому что они находятся в функции итератора, асинхронной функции или имеют ссылку на замыкание, если вы смотрите скомпилированныйВ файле вы увидите, что компилятор создал класс для помещения этих переменных, и этот класс создается при вызове функции.
Теперь я не знаю, как писать длинные вещи, и мне лучшечем заняться в моей жизни.Если вам нужна «точная», «академическая», «правильная» версия, прочитайте ЭТО:
http://blogs.msdn.com/b/ericlippert/archive/2010/09/30/the-truth-about-value-types.aspx
Это 15 минут, которые я ищу!Это лучше, чем версии msdn, потому что это сжатая статья "готов к использованию".