c# 里 form 的 this.close() 和 this.dispose () 到底有什么区别啊?我分不清

 我来答
泣血守望者
推荐于2018-03-01
知道答主
回答量:19
采纳率:0%
帮助的人:21.3万
展开全部
close方法在释放资源后还可以继续使用,并没有在内存中删除,但是dispose方法会从内存中删除该资源,而你就不能再使用它!例如:你有两个窗体Form1和Form2,你在第一个窗体中用Form2 XXX=new Form2然后你调用close方法,这时资源还在,你仍可以用XXX.show()方法使用Form2,但是如果你用的是dispose方法,那么该资源就不存在了,如果这时你调用XXX.show()方法的话,就会出错!
追问
public Form1()
{

InitializeComponent();

Form2 f2 = new Form2();
f2.ShowDialog();
f2.Close();
f2.Show();

}
会提示 无法访问已释放的资源 对象名 ”Form2“
追答
不好意思,我可能没仔细看,刚试了下确实是这样。这个例子中的问题是调用Close()方法后Form2的窗体句柄已经关闭,虽然在内存中Form2还在但是这样是不能访问的,它已经受到运行库的保护了,我测试了下,你还可以从中读取数据,但是写入已经不行了。重新给你个例子吧:你在Form2中定义一个string类型的变量testString,给它赋值(像这样public string testString="Hello World!"这里的testString一定要是public的,这样才能访问。)。然后在Form1中拖一个TextBox和一个按钮,然后在按钮中这么写Form2 myForm2=new Form2();
myForm2.Close();
Label1.Text=myForm2.testString;这时你发现Label中变为了Hello World!说明Form2的资源还在,并没有被销毁。
但是如果你调用dispose方法,会发现label中也变成了Hello World。为什么会这样呢?如果你仔细观察C#中的很多类会发现他们基本都只公开了Close方法(窗体比较特殊),他们都实现了IDisposable,但都隐藏了Dispose方法,当你调用Close方法的时候它会自己调用dispose方法,但是这时候资源并没有从内存中销毁,而必须等到运行库进行垃圾回收的时候来销毁,而要让垃圾回收销毁不需要的资源你必须要显示的调用GC或者是对象在整个程序中不可及才会被销毁(这里的不可及是指程序的再也没有代码可以访问到该对象)。所以Close和Dispose方法其实实现的功能差不多,并没有多大的区别!
vwenye
2011-06-02 · TA获得超过4984个赞
知道大有可为答主
回答量:1510
采纳率:0%
帮助的人:823万
展开全部
Close是关闭窗口句柄
Dispose是关闭窗口句柄以后同时释放内存
比如你在一个代码里面
Form form = new Form();
form.ShowDialog();
然后你在form的代码中用this.Close()
窗口关闭后,回到这个代码中,还是可以继续操作form的,因为对象还在
但是如果是Dispose回来,就不能操作form了,因为内存被释放了
追问
谢谢啊,可是为什么当重载dispose 方法 时, close 方法 又会调 dispose 方法
追答
重载不会调用吧?
我印象中是没有
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
645611740
2011-06-02 · TA获得超过300个赞
知道小有建树答主
回答量:744
采纳率:0%
帮助的人:458万
展开全部
Close是关闭窗口句柄
Dispose是关闭窗口句柄以后同时释放内存
this.Close();
this. dispose ();
不可以颠倒顺序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e618f23
2011-06-03 · 超过75用户采纳过TA的回答
知道小有建树答主
回答量:275
采纳率:0%
帮助的人:132万
展开全部
你这样测试一下就知道了
form1是一个存在的窗体,从其mdi父窗口中写这样的代码
form1.close();
form1.show();
你试试,是可以的
但是如果
form1.dispose();
form1.show();
试试,会提示没有该对象的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式