List<string> a = new List<string>();
            a.Add("ASDFADF");
            List<string> b = a;
            b = null;为什么a依然还有值?

解决方案 »

  1.   

    List<string> b = a;
    这是让另一个List<string>指向a,不是对a进行拷贝。你可以把这样的赋值语句,当成是建立一根指向目标的指针。b = null;
    这是让b指向为空,不是把指向的List<>清空
      

  2.   

    Student student1 = new Student();
                student1.name = "ASDF";            Student student2 = student1;
                student2.name = "!@##!@";
    这个时候student1.name和student2.name是一样的,都是指向了同一个东西,为什么List不是的呢?
      

  3.   

    你先理解“引用” Reference的概念,这是整个C#和面向对象编程的基础。
      

  4.   


     List<string> a = new List<string>();
      a.Add("ASDFADF");
      List<string> b = a;
      a = null;
    这很明显,
      

  5.   

    你先理解“引用” Reference的概念,这是整个C#和面向对象编程的基础。
      

  6.   

    就差一步:b=null后面再加一句a=b;
      

  7.   

    c#中的引用型类型都相当于c里的指针,也就是说每个变量其实只是保存一个地址
    b=a其实相当于把a保存的指针赋值给了b,这样a和b同时指向一个地址
    当你把b重新赋值时,a里的地址没有变化,所以a仍然指向List<string>
      

  8.   

    我还是不明白。这是怎么回事
    List<T>是不是引用类型,如果是的话,更改了其中的一个值,另外一个也得改变。也就是a也得为null.
      

  9.   

    这两个结果是完全不一样的,请问为什么?
    List<string> a = new List<string>();
                a.Add("ASDFADF");
                List<string> b = a;
                b = null;
               
                Student student1 = new Student();
                student1.name = "ASDF";            Student student2 = student1;
                student2.name = "!@##!@";
      

  10.   

    打个比方,我给A了件东西。B也有和A同样的东西,我现在把B的东西没收了?难道A也没有了?
      

  11.   

    List<string> b = a;
    实际上是 b=*a;
    并不是b=a 
      

  12.   

    再给你一个比喻吧:
    List<int> A = new List<int>() {"ax", "bx", "cx"}; 
    这里的new List<int>() {"ax", "bx", "cx"}相当于一个装了3块蛋糕ax、bx、cx的盘子P
    A相当于准备用于就餐的一把勺子,现在放到了P边上就绪。然后 List<int> B = A; ,相当于给之前的那个盘子P边上又添上一把勺子。接着,你既可以用A吃盘子P里的蛋糕,也可以用B来吃。无论用A或者B,你吃到的都是P里的蛋糕。最后,B = null; ,相当于把勺子B扔在一边,只留下勺子A用来吃蛋糕了。假设此前你用B吃掉了蛋糕ax,则此时,盘子P里只有蛋糕bx和cx了,并不会因为你把勺子B扔了就会再多出一块蛋糕ax来。好累……
      

  13.   

    这里你可以输出 student1.name的值,应该是!@##!@。
    student1和student2都是指向相同的内存地址的引用.当改变student2的属性的时候,其实在调用student1的属性的时候,值也变了,因为内存中的数据变了。