public class MyClass
{
private string name; public MyClass(string s)
{
name = s;
} public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
}//another class
public void Test()
{
   ArrayList lst = new ArrayList();
   MyClass c = new ("abc");
   lit.Add(c);
   c = null;
   MyClass c1 = lst[0] as MyClass;
   if (c1 != null)
      {
        Console.WriteLine(c1.Name); 
      }
}为什么在Test中把c设成null不影响lst中的值呢?

解决方案 »

  1.   

    好像不是这样吧
    public void Test()
    {
       ArrayList lst = new ArrayList();
       MyClass c = new ("abc");
       lit.Add(c);
       c.Name = "bcd";
       c = null;
       MyClass c1 = lst[0] as MyClass;
       if (c1 != null)
          {
            Console.WriteLine(c1.Name); 
            //输出为bcd  why?
          }
    }
      

  2.   

    对ArrayList是属于值类型的。不是引用类型的。呵呵!
      

  3.   

    我想它存的是地址,但不是C对象的地址,是C对像所指的地址
    也就是对C对象所指的地址做了另一次引用,你把C变为NULL,只是让C不再指向以前的地址
    跟LIST中的对象无关系,如果你C。NAME = null,就影响了
      

  4.   

    lit.Add(c);这个可以理解为list把c的地址复制并加进了列表里。
    之后你再修改c的地址并不影响lit里保存的地址。
      

  5.   

    ArrayList是属于值类型的
    你执行lit.Add(c);就是把c的值加入到了lst 
    在把c = null;对lst没有影响,呵呵