关闭窗口后还能访问其中的变量

startexcel 2010-11-01 09:17:03
Form1 b = new Form1();
b.ShowDialog();
int c=b.Y;
这时居然还能取得到b.Y的值,为什么?是GC还没有回收吗?如果是的话那这样写不是很不保险,有可能会取不到值?
...全文
93 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
startexcel 2010-11-15
  • 打赏
  • 举报
回复
还有更好的答案吗?
jointan 2010-11-01
  • 打赏
  • 举报
回复
Close和Dispose只是释放资源,如果对象的类实现组件模型,就是依次释放各级资源.不牵涉释放资源的东西,只要引用还存在,那就还可以访问.比如b.Y只是一个Int,还可以访问,但b中如果有一个以组件模型的方式嵌入的一个Image,那肯定就不能访问了.
phil999 2010-11-01
  • 打赏
  • 举报
回复
如果调用的是 Form.Close,那么 dispose 被调用,资源被释放,但是变量引用的对象还是在的,只不过状态不对了

ShowDialog 的行为又有不同,它返回后,窗体只是隐藏,没有销毁,当然可以访问。这也意味着,如果用的是局部变量,你应当显式销毁它。

Form1 b = new Form1();
b.ShowDialog();
int c=b.Y;
b.Dispose();
dobdream 2010-11-01
  • 打赏
  • 举报
回复
这样写是可以取到b.Y的值的,因为对象还存在。
对象就连Dispose方法都没有执行,怎么会回收呢
skyering 2010-11-01
  • 打赏
  • 举报
回复
b的实例仍然存在。
dapenge 2010-11-01
  • 打赏
  • 举报
回复
取到了 所以取得到
ZengHD 2010-11-01
  • 打赏
  • 举报
回复
为什么取不到?b又不为空,这个和GC没有关系吧

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧