请向我解释为什么这不分配副本,而是分配指针?C#
这就是正在讨论的计划:请向我解释为什么这不分配副本,而是分配指针?C#,c#,console,C#,Console,这就是正在讨论的计划: namespace TestStuff { public class Test { public int x; } class Program { static void Main(string[] args) { Test firstClass = new Test(); firstClass.x = 5; Te
namespace TestStuff
{
public class Test
{
public int x;
}
class Program
{
static void Main(string[] args)
{
Test firstClass = new Test();
firstClass.x = 5;
Test secondClass = firstClass;
firstClass.x = 6;
Console.WriteLine(secondClass.x);
}
}
}
这个程序的输出是6,我假设这是因为testsecondclass=firstClass代码>,使secondClass指向firstClass,而不是复制firstClass。如果我想让secondClass成为firstClass的复制品,我该怎么做呢?我想这是一个OOP(面向对象编程)的误解。虽然Test.x
是一个int
(因此是一个值类型),而且如果到处复制,就不会得到它的引用,但是在这种情况下,您将整个Test
实例从firstClass
复制到secondClass
testsecondclass=firstClass
将使两个“引用”成为同一个对象,通过修改firstClass.x
您还将更新secondClass.x
。这不是因为.x
,而是因为firstClass
和secondClass
都是对象的同一个实例
如果我想把secondClass复制成firstClass,我该怎么做
为了实现这一点,您需要克隆对象。可能是一个很好的来源。这是如何回答“如何复制对象”的?OP已经发现了这一点。@HimBromBeere几秒钟后,当我刚刚意识到这一点时,我已经添加了答案。我试图解决@victorfaarvang的误解,而不仅仅是他问题的最后一个阶段。