摘要:建構函式(Constructor)與解構函式(Destructor)
一個類別的建構函式必須使用名為 New 的 Member Function
那為什麼Form1會看不到Sub New() 呢?
那是因為已經由Visual Studio 幫忙建立了,而相關的程式碼會放在 Form1.Designer.vb
而這個檔案預設是被隱藏起來的
必須在方案總管中先點選"顯示所有檔案" 再把Form1展開,就可以看到 (可以參考BillChung的Windows Form Designer)
一般來說,建構函式並不需要帶有參數
但若有需要
可以使用多載(overloading)的方式 宣告一個帶有參數的建構函式(又稱參數型建構函式)
例如:
Public Sub New(ByVal patientName As String, Optional ByVal patientGender As Gender = Gender.NotAvaliable)
_PatientName = patientName
_PatientGender = patientGender
End Sub
有句話說: 有借有還再借不難
有建構函式(要求記憶體空間) 當然就要有解構函式 (歸還記憶體空間)
而要使用解構函式 必須繼承 IDisposable 介面 並實作 Dispose
在Dispose函式必須要釋放相關的資源並且呼叫父類別的Dispose函式
依據MSDN對IDisposable的說明:
當不再使用 Managed 物件時,記憶體回收行程會自動釋放配置給該物件的記憶體,然而,不可能預測記憶體回收將在什麼時候發生。此外,記憶體回收行程不知道 Unmanaged 資源,例如,視窗控制代碼 (Window Handle)、開啟檔案和資料流。
將這個介面的 Dispose 方法與記憶體回收行程結合使用可明確地釋放 Unmanaged 資源。不再需要物件時,該物件的消費者可以呼叫這個方法。
也就是說
1. 並非在呼叫Dispose方法之後,使用的記憶體空間就會立即被釋放
2. 若在程式中有使用Unmanaged資源,在Dispose方法中必須自行針對Unmanaged的資源作相關釋放的處理