private void button1_Click(object sender, System.EventArgs e)
{
    Form2 f=new Form2();        //Form2是另外一窗体
    f.show();                  //显示窗体
}
问题是:f是Form2类是一个实例,也是一个普通的对象变量,退出{}后f应该被释放,那么窗体也应该被释放,可是窗体却还能显示在那儿?这是为什么?

解决方案 »

  1.   

    f是一个对象啊??你想把它当成是变量也行。实例化了一个对象f:
    Form2 f=new Form2();    f.show();调用f这个对象的方法。我的理解。请指正!
      

  2.   

    f.show();                  就已经实例化了
      

  3.   

    Form2 f=new Form2();就应该已经实例化了吧
      

  4.   

    对象在击活状态,托管理代码有自己的回收机制
    虽然变量f已经超出了生存期,但它指向的对象并没有。
    对象什么情况才符合回收的条件,可以看下。NET资料(我也没多大深入了解)
      

  5.   

    Form的Handle是非托管对象,是由Windows系统来释放的。
      

  6.   

    你调用一个窗体的dispose方法就会强制释放掉了.
      

  7.   

    from是系统已注册的dll类,属于非托管对象,是由Windows系统来控制的。
    对象指针f和系统指针都指向from,虽然变量f已经超出了生存期,但系统指针没有,
    所以当你点击关闭按扭时,将会调用系统事件,由系统指针来释放这块内存。
      

  8.   

    form属于托管对象的,有代0机制进行收集,如果在实际编程中出现你的问题,可以考虑,手动释放。
      

  9.   

    有C++基础就好了,f起始相当于一个指针,指向new得到的对象,推出{}后f不存在了,但对象还存在,还被引用
      

  10.   

    呵呵,
    窗体是由操作系统管理的.
    只有向windows发送一定的消息,操作系统负责退出消息循环,从而窗体生命结束.
    而你的form 只是内容中的对象, 其实就是一块数据,
    离开作用域范围, 即使进行了垃圾回收后, 只是回收了这块内存. 并没有
    释放这些非拖管资源。其实就象打开一个文件后, 没有close
    却离开了作用域。