我是C#编程的初学者.我现在正在研究strings,structs,value types和reference types.作为公认的答案,在这里和在这里,strings是具有存储在堆栈指针,而存储在堆的实际内容的引用类型.此外,如此处所述,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);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码片段输出
Person 1
Person 2
Run Code Online (Sandbox Code Playgroud)
这让我感到困惑.如果strings是引用类型并且structs是值类型,那么person_1.name和person_2.name应该指向堆上的相同空间区域,不应该是它们吗?
我读了一些类似问题的答案,但我的问题没有什么不同,因为我不理解在书中写的关于这个问题的陈述.
因为struct是值类型,所以每个实例都不需要在堆上实例化对象; 这在创建类型的许多实例时会产生有用的节省.例如,创建值类型的数组只需要一个堆分配.
我的意思是数组如何只需要一个堆分配?...或单个堆分配是什么意思