Мне просто нужно простое разъяснение выделения памяти объекта
Допустим, у меня есть следующий класс:
public class Test
{
public int a;
public Test(int A)
{
a = A;
}
}
////Main program
Test test1 = new Test(32);
Test test2 = test1;
test2.a = 5;
Print(test1.a.ToString());// output =5
Print(test2.a.ToString());// output =5
Мой вопрос:
Я знаю, что типы значений размещаются в стеке, а ссылочные типы — в куче. Но когда создается объект и у него есть поле типа значения, будет ли это поле выделено? Когда я создаю копию test1 и назначаю ее test2, оба объекта указывают на одну и ту же ячейку памяти, значит ли это, что int a имеет только одну копию в стеке, и поэтому оба объекта имеют одинаковый вывод 5?.





В этой ситуации, когда ссылочный тип имеет тип значения. Он сохраняется в пространстве кучи объекта. Если подумать, на самом деле это очень похоже на то, как объекты хранят ссылки на другие объекты. В пространстве, выделенном для значения внутри объекта, есть выделенный объем пространства.
Причина, по которой оба ваших объекта печатаются одинаково, заключается в том, что у вас есть две переменные, ссылающиеся на один и тот же объект в памяти. Когда мы ссылаемся на объекты int a, мы переходим к значению местоположения A из ссылки на объекты. Поскольку обе переменные указывают на одну и ту же ссылку, расположение a является одним и тем же местом в памяти и, следовательно, одним и тем же значением.
так что в основном тип значения также будет храниться в куче, в той же ячейке памяти объекта?
Да, я еще немного отредактировал для ясности
Круто, спасибо за все полезные источники
«типы значений размещаются в стеке» просто не соответствует действительности.