日期:2014-05-19  浏览次数:20932 次

一点疑惑
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中的值呢?

------解决方案--------------------
ArrayList中存的是值不是地址
------解决方案--------------------
对ArrayList是属于值类型的。不是引用类型的。呵呵!
------解决方案--------------------
因为执行了这个lit.Add(c);
------解决方案--------------------
我想它存的是地址,但不是C对象的地址,是C对像所指的地址
也就是对C对象所指的地址做了另一次引用,你把C变为NULL,只是让C不再指向以前的地址
跟LIST中的对象无关系,如果你C。NAME = null,就影响了
------解决方案--------------------
lit.Add(c);这个可以理解为list把c的地址复制并加进了列表里。
之后你再修改c的地址并不影响lit里保存的地址。
------解决方案--------------------
ArrayList是属于值类型的
你执行lit.Add(c);就是把c的值加入到了lst
在把c = null;对lst没有影响,呵呵