代码来至:http://www.cnblogs.com/HeroBeast/archive/2008/07/14/1242976.htmlpublic class Node
    {
        private Node _node;
        private object _value;        public Node(object v)
        {
            this._value = v;
            this._node = null;
        }        public Node NodeNext
        {
            get { return _node; }
            set { _node = value; }
        }
        public object Value
        {
            get { return _value; }
        }    }
class Program
    {
        static void Main(string[] args)
        {
            Node n1 = new Node("A");
            Node n2 = n1;
            n1.NodeNext = new Node("B");  
            //当时执完这句时,n1和n2保持一至,二者的Value属性值都为A NodeNext属性值都为 B。即n1{Value:A, NodeNext:{Value:B, NodeNext:null}},n2{Value:A, NodeNext:{Value:B, NodeNext:null}}
            n1 = n1.NodeNext;  
            //可是执行完这句时,n1{Value:B, NodeNext:null}, 而n2{Value:A, NodeNext:{Value:B, NodeNext:null}}, 这是为什么呢?
            n1.NodeNext = new Node("C");
            //执行完这句时,n1{Value:B, NodeNext:{Value:C, NodeNext:null}},而n2{Value:A, NodeNext:{Value:B, NodeNext:{Value::C, NodeNext:null}}}
        }    }有谁能帮我解释一下这段代码?谢谢!

解决方案 »

  1.   


                Node n1 = new Node("A"); //n1{_value=(object)"A"; _node=null;}
                Node n2 = n1; //n2  引用 n1{_value=(object)"A"; _node=null;}
                n1.NodeNext = new Node("B");//n1{_value=(object)"A"; _node={_value=(object)"B",_node=null;};}
                n1 = n1.NodeNext;  //n1{_value=(object)"B",_node=null;}
                n1.NodeNext = new Node("C");// n1{_value=(object)"B"; _node={_value=(object)"C",_node=null;};}           
      

  2.   

    你要搞明白引用的含义。。Node n1 = new Node("A");   //n1指向堆中的一个对象 就是new Node("A") 假设这个对象叫ANode n2 = n1;   //n2也指向堆中的对象n1.NodeNext = new Node("B");  //n1的NodeNext其实也就是A的NodeNext指向堆中的一个新对象new Node("B"),假设叫Bn1 = n1.NodeNext;   //这个时候n1又指向B,但n2还是指向A n1.NodeNext = new Node("C"); //n1因为现在是B,所以相当于B的NodeNext指向了Node("C")假设叫C