Я сомневаюсь, что это относится к ссылочным типам C # "String".
Следующий код:
string s = "lana del rey"
string d = s;
s = "elvis presley";
Console.Writeline(d);
Почему на выходе нет «элвиса пресли»? Если d указывает на то же место в памяти, что и s?
Не могли бы вы объяснить это?
Более подробное объяснение моего первоначального вопроса:
Все ваши ответы были очень полезными. Этот вопрос пришел ко мне с этим общим образцом кода, который часто используется для объяснения разницы между типами значений и ссылочными типами:
class Rectangle
{
public double Length { get; set; }
}
struct Point
{
public double X, Y;
}
Point p1 = new Point();
p1.X = 10;
p1.Y = 20;
Point p2 = p1;
p2.X = 100;
Console.WriteLine(“p1.X = {0}”, p1.X);
Rectangle rect1 = new Rectangle
{ Length = 10.0, Width = 20.0 };
Rectangle rect2 = rect1;
rect2.Length = 100.0;
Console.WriteLine(“rect1.Length = {0}”,rect1.Length);
В этом случае второй оператор Console.WriteLine выведет: «rect1.Length = 100».
В этом случае класс является ссылочным типом, а структура - типом значения. Как я могу продемонстрировать поведение одного и того же ссылочного типа с помощью строки?
Заранее спасибо.
int x = 1; int y = x; x = 2; Console.WriteLine(y);
Ожидаете ли вы, чтоy
будет1
или2
?int y = x
не означает, чтоy
теперь псевдонимx
. Это означает, что текущее значениеy
изменяется на текущее значениеx
. Между ними не складывается никаких постоянных отношений. То же самое и с вашимиs
иd
. - person Eric Lippert   schedule 16.01.2014