【发布时间】:2017-03-26 16:07:19
【问题描述】:
我是 C# 编程的初学者。我现在正在学习strings、structs、value types 和reference types。正如here 和here 中公认的答案,strings 是引用类型,它们的指针存储在堆栈上,而它们的实际内容存储在堆上。此外,如here 中所述,structs 是值类型。现在我尝试用structs 和strings 来练习一个小例子:
struct Person
{
public string name;
}
class Program
{
static void Main(string[] args)
{
Person person_1 = new Person();
person_1.name = "Person 1";
Person person_2 = person_1;
person_2.name = "Person 2";
Console.WriteLine(person_1.name);
Console.WriteLine(person_2.name);
}
}
以上代码sn-p输出
Person 1
Person 2
这让我很困惑。如果strings 是引用类型,structs 是值类型,那么 person_1.name 和 person_2.name 应该指向堆上的同一个空间区域,不是吗?
【问题讨论】:
-
我……也很困惑……您实际上是在设置名称的值,对吗?那么结果有什么问题呢?
-
@IanH OP 混淆了改变引用(使其完全引用不同的对象)和改变引用引用的对象。字符串是一个不好的例子,因为它是不可变的。
-
@RaymondChen 啊,我想我知道了,谢谢:)
标签: c# string value-type reference-type