处理后仍然可以访问控件的属性

时间:2012-08-20 20:46:12

标签: .net vb.net winforms using

我使用下面的模板显示模态表单

Using tempForm As New CustomForm

    'Do Something

    StaticClass.StaticMemeber = tempForm
    tempForm.ShowDialog

End Using

'I can still access the properties of tempForm here
MsgBox(StaticClass.StaticMemeber.Text)

'However this below returns True
MsgBox(StaticClass.StaticMember.IsDisposed)


Public Class StaticClass

    Public Shared StaticMember as Control

End Class

有人可以帮助我理解为什么会这样。感谢。

1 个答案:

答案 0 :(得分:2)

在垃圾收集器删除并释放正在使用的内存之前,已处置的对象仍然存在。 IDispose接口只是一个模式。实现该模式的对象应该做的事情之一是在处置属性和方法之后返回ObjectDisposed异常。但是,编译器或CLR中没有任何内容强制对象执行此操作,它只是编码对象的程序员应该实现的模式。在垃圾收集器实际删除obejct之前,您仍然可以访问其属性。在这种情况下,StaticMember仍然引用该对象。在释放该引用之前,GarabageCollector不会终止该对象。