【发布时间】:2014-01-15 20:49:34
【问题描述】:
我对 C#“字符串”引用类型有这个疑问。
以下代码:
string s = "lana del rey"
string d = s;
s = "elvis presley";
Console.Writeline(d);
为什么输出不是“elvis presley”?如果 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也是如此。 -
@EricLippert 我认为他将引用与指针混淆了,正如 zerkms 所提到的那样。
-
如果您有新问题,那么您应该提出新问题,而不是将新问题编辑到现有(并且已经回答)的问题中。
-
感谢您的所有反馈@Servy
标签: c# reference-type