我有一个在许多形式下都需要的类,所以我在一个模块中声明了它。
Module modTTS
Public g_TTS As clsTTS
End Module
我在这个类中有一个Finalize方法:
Protected Overrides Sub Finalize()
Stop'this is never called. I don't know why
MyBase.Finalize()
End Sub
我没有在程序结束时显式地销毁类。我只是想默默地让它溜走。这是无效的吗?没有调用Finalize过程的原因可能是什么?
谢谢!
根据建议,我已将我的班级改为:
公共类clsTTS:实现IDisposable
Private _Synth As New SpeechSynthesizer
Private _bDisposed As Boolean = False
' Public implementation of Dispose pattern callable by consumers.
Public Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
' Protected implementation of Dispose pattern.
Protected Overridable Sub Dispose(ByVal uDisposing As Boolean)
If _bDisposed Then
Return
End If
If uDisposing Then
' Free any other managed objects here.
If Not _Synth Is Nothing Then
_Synth.Dispose()
End If
End If
' Free any unmanaged objects here.
_bDisposed = True
End Sub
下面是一个使用ApplicationContext类- MSDN的例子
同样,Finalize()
可能不会在应用程序线程终止之前被调用,因此,资源永远不会被释放。
你应该实现IDisposable Interface - MSDN。在ApplicationExit
上调用对象的.Dispose()
方法
iDisposable很容易实现,只需在Class声明中添加: Implements iDisposable
,智能感知将添加必要的过程。
您还可以在FormClosing
/FormClosed
事件中处置/关闭对象。
就我个人而言,我只使用Shared
成员作为函数,或保留一些字符串变量,而不是对象。
查看下面的链接,了解如何对静态成员进行反初始化:
http://bytes.com/topic/c-sharp/answers/536465-there-anything-like-static-destructor如何在静态变量结束前获得通知