There is a strang symbol "~" ,when i read the code of "Zoom In" class.the key part of the code is shown as follows:
private
System.Drawing.Bitmap m_bitmap;
private IntPtr m_hBitmap;
private IHookHelper m_pHookHelper;
private INewEnvelopeFeedback m_feedBack;
private IPoint m_point;
private Boolean m_isMouseDown;
private System.Windows.Forms.Cursor m_zoomInCur;
private System.Windows.Forms.Cursor m_moveZoomInCur;
public ZoomIn()
... {
//Load resources
string[] res = GetType().Assembly.GetManifestResourceNames();
if(res.GetLength(0) > 0)
...{
m_bitmap = new System.Drawing.Bitmap(GetType().Assembly.GetManifestResourceStream(GetType(), "ZoomIn.bmp"));
if(m_bitmap != null)
...{
m_bitmap.MakeTransparent(m_bitmap.GetPixel(1,1));
m_hBitmap = m_bitmap.GetHbitmap();
}
}
m_pHookHelper = new HookHelperClass ();
}
~ ZoomIn()
... {
if (m_hBitmap.ToInt32() != 0)
DeleteObject(m_hBitmap);
m_pHookHelper = null;
m_zoomInCur = null;
m_moveZoomInCur = null;
}
private IntPtr m_hBitmap;
private IHookHelper m_pHookHelper;
private INewEnvelopeFeedback m_feedBack;
private IPoint m_point;
private Boolean m_isMouseDown;
private System.Windows.Forms.Cursor m_zoomInCur;
private System.Windows.Forms.Cursor m_moveZoomInCur;
public ZoomIn()
... {
//Load resources
string[] res = GetType().Assembly.GetManifestResourceNames();
if(res.GetLength(0) > 0)
...{
m_bitmap = new System.Drawing.Bitmap(GetType().Assembly.GetManifestResourceStream(GetType(), "ZoomIn.bmp"));
if(m_bitmap != null)
...{
m_bitmap.MakeTransparent(m_bitmap.GetPixel(1,1));
m_hBitmap = m_bitmap.GetHbitmap();
}
}
m_pHookHelper = new HookHelperClass ();
}
~ ZoomIn()
... {
if (m_hBitmap.ToInt32() != 0)
DeleteObject(m_hBitmap);
m_pHookHelper = null;
m_zoomInCur = null;
m_moveZoomInCur = null;
}
On this issue,Somebody give me a reasonable explanation:
"C#中析构函数的特点及作用是什么?
析构函数和构造函数正好相反.
构造函数是和类同名.没有返回值.
析构函数是在类名前加~.也没有返回值.
构造函数上在对象创建时执行.
析构函数是在程序结束时执行.
一般时候析构函数里面写的都是一些资源回收之类的东西.
不过C#的析构函数的调用机制和C++不同.并不能保证每次都会调用.所以最好不要利用C#的析构函数来回收资源."