Я пытаюсь подтвердить свое понимание того, как C # /. NET / CLR обрабатывает типы значений и ссылочные типы. Я прочитал очень много противоречивых объяснений, я все еще
Это то, что я понимаю сегодня, пожалуйста, поправьте меня, если мои предположения неверны.
Типы значений, такие как int и т. Д., Живут в стеке, ссылочные типы живут в управляемой куче однако если ссылочный тип имеет, например, переменную экземпляра типа double, он будет жить вместе со своим объектом в кучу
Вторая часть меня больше всего смущает.
Давайте рассмотрим простой класс с именем Person.
У человека есть свойство с именем Name.
Допустим, я создаю экземпляр Person в другом классе, назовем его UselessUtilityClass.
Рассмотрим следующий код:
class UselessUtilityClass
{
void AppendWithUnderScore(Person p)
{
p.Name = p.Name + "_";
}
}
и затем где-то мы делаем:
Person p = new Person();
p.Name = "Priest";
UselessUtilityClass u = new UselessUtilityClass();
u.AppendWithUnderScore(p);
Person - это ссылочный тип, когда он передается в UselessUtilityClass - это то, куда я иду - орехи ... VARIABLE p, который является экземпляром ссылки на Person, передается VALUE , что означает, что когда я напишу p.Name, я увижу "Priest _"
А потом, если бы я написал
Person p2 = p;
И я делаю
p2.Name = "Не священник";
И напишите имя p, как показано ниже. Я получу "Not the Priest"
Console.WriteLine(p.Name) // will print "Not a Priest"
Это потому, что они являются ссылочными типами и указывают на один и тот же адрес в памяти.
Правильно ли мое понимание?
Я думаю, что происходит некоторое недопонимание, когда люди говорят, что Все объекты в .NET передаются по ссылке , это не зависит от того, что я думаю. Я могу ошибаться, вот почему я пришел в Stackers.