日期:2014-05-18  浏览次数:20973 次

关于对象存活期迷惑
我写个一个类 class1。继承自组建
  Inherits Component

 在这个类重载了  
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
  MyBase.Dispose(disposing)
  Over()
  End Sub
释放所有自定义的资源。

然后再另外有个控件B 定义了类型为class1的窗体级变量 c1=new classs1 用完了,顺手调用了c1.Dispose

再然后,因为某种需要要用到class1 
我用isnothing判断 c1是否nothing 
if isnothing(c1) then c1=new class1

但奇怪的是。虽然上面的已经c1.Dispose 了 但在 isnothing(c1)还是返回 false 这是为什么呢 我都已经dispose了啊

------解决方案--------------------
除非代码设置 c1 为 nothing 或 c1 所在的 B 被释放,否则 c1 就一直存在,Dispose 充其量就一个方法,普遍作用是释放非托管资源,而托管的 class1,就得由系统在适当的时机来释放了,我们能做的,就是取消它所有引用,扫除释放前的障碍。
------解决方案--------------------
Dispose跟 = null 两回事儿,Dispose主要是用来释放资源,而不是析构的。