一个arraylist al,一个对象实例A.
al.add(A);
当A.dispose()之后,al里面的A是不是也不在了?
al里面对象数量减少1?
谢谢!

解决方案 »

  1.   

    都不会,A只是一个引用变量而已
    都A.Dispose()一般就是将对象消毁,假如说是:A=null
    只是A为空引用了,没有指向任何地址,不再指向之前那个对象了,
    但arrayList里那个仍然没变
      

  2.   

    那如果要释放arraylist里面的对象,应该怎么写?下面两种方式有什么区别?
    (1)
    foreach(classA a in al)
    {
        a.dispose();
    }(2)
    al.clear();
    哪种方式比较好点儿?
      

  3.   

    那如果要释放arraylist里面的对象,应该怎么写?下面两种方式有什么区别? 
    (1) 
    foreach(classA a in al) 

        a.dispose(); 
    } (2) 
    al.clear(); 
    哪种方式比较好点儿?
    ---------------------这是两个不同的根念
    al.clear,是将al清空了al.count=0了
    循环a.dispose是释放,又是最初的那个概念了
    释放后al里仍有那么多个,但是数据全部为null了
      

  4.   

    ArrayList清空以后,原先存储于其中的对象是不是存在,还要取决其他因素:如是否有其他地方引用?是否发生了垃圾回收?没有其他引用但未发生垃圾回收的话,对象仍旧存在,但无法引用到,如果使用了非托管资源的话,可能会有点麻烦。清除ArrayList中的对象,一般需要逐一Dispose,再将ArrayList.Clear()。
      

  5.   

    如果楼主对这个问题有兴趣可以去看一些关于.net GC原理的一些文章,什么回收线程、什么时候调用析构函数、Dispose到底是做什么的,对象引用是什么、对象的生命期控制、垃圾回收的代....
    很有趣,有空研究下