что происходит, когда типы значений определены внутри ссылочных типов

привет всем, у меня несколько вопросов

1)

class ClassName 
{
    public int[] a = new int[100];
}

что происходит, когда объект этого класса создается, я имею в виду, где хранится массив целых чисел, в стеке [тип значения] или в куче [ссылочный тип]

Я смущен, поскольку типы значений спецификаций хранятся в стеке, тогда массив будет храниться в стеке.

но ссылочные типы создаются в куче в соответствии со спецификациями

пожалуйста, ребята, помогите мне понять это. я не хочу писать код, не зная, что происходит за кулисами

заранее спасибо


person Constantine    schedule 26.01.2014    source источник
comment
возможный дубликат Поля класса, хранятся ли они в стеке или куче?   -  person Markus    schedule 27.01.2014
comment
Типы значений не размещаются в стеке, они размещаются внутри него. Массивы имеют ссылочный тип, поэтому данные массива хранятся в куче, а ссылка на них хранится в экземпляре ClassName.   -  person Lee    schedule 27.01.2014
comment
Повторяющийся вопрос, но вот действительно хороший ответ: stackoverflow.com/a/2561622/67038   -  person JMarsch    schedule 27.01.2014
comment
@Lee, где будет публично int a = 12; хранится в?   -  person Constantine    schedule 27.01.2014
comment
По-разному. Может быть стопка или куча. В каком контексте?   -  person David Heffernan    schedule 27.01.2014
comment
@Constantine - он будет храниться как часть содержащихся данных структуры / объекта.   -  person Lee    schedule 27.01.2014
comment
Типы значений допускаются для хранения в стеке. Нет требования, чтобы они там хранились. Полезное дополнительное чтение: blogs.msdn.com/b/ericlippert/archive/2010/09/30/   -  person Mike Zboray    schedule 27.01.2014


Ответы (1)


Здесь нет типов значений. Так что вопрос спорный. И ClassName, и int [] являются ссылочными типами.

Если тип значения объявлен как автоматический локальный, он сохраняется в стеке. Если он объявлен внутри другого типа, он сохраняется внутри этого другого типа.

Это один из величайших неумирающих мифов C # о том, что типы значений всегда хранятся в стеке.

person David Heffernan    schedule 26.01.2014