请向我解释为什么这不分配副本,而是分配指针?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的误解,而不仅仅是他问题的最后一个阶段。