对对象副本所做的更改将反映在原始对象中

时间:2018-07-29 11:02:53

标签: c#

在下面的代码段中,我对“当前”对象进行了更改,该对象是“ head”对象的副本。但是,更改会反映到全局head对象。

class Node
    {
        public Node next; //pointer
        public Object data; //data

        public Node(Object d)
        {
            data = d;
        }
    }    

public class CustomLinkedList
        {
            private Node head = new Node(null); //head of linked list

            public void Add(Object data)
            {
                Node newNode = new Node(data);

                Node current = head;

                while (current.next != null)
                {
                    current = current.next;
                }

                current.next = newNode;
            }
    }

1 个答案:

答案 0 :(得分:1)

原因是-类是引用类型。

引用类型是一种类型,其值是对适当数据的引用而不是对数据本身的引用。这就是为什么更改一个对象也会更改其他对象的原因。

阅读这些-http://www.yoda.arachsys.com/csharp/parameters.html

http://www.albahari.com/valuevsreftypes.aspx

解决方案是对要考虑的对象进行深度克隆。

阅读本-Deep cloning objects

相关问题