文章編號: 315528 - 上次校閱: 2007年5月11日 - 版次: 2.6

如何在 Visual Basic.NET 或 Visual Basic 2005 中衍生的類別中實作 Dispose 方法

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

結論

當您撰寫擴充基底類別的類別時,需要某種方式處理配置資源的發行。如果要執行這項操作,應在衍生類別中覆寫自基底類別的 Dispose 方法。 本文將告訴您在這個案例中遇到的一般問題如何適當地覆寫 Dispose] 方法及是要釐清 subtleties 下列 Visual Basic.NET 協助文件中的部分:
http://msdn2.microsoft.com/en-us/library/fs2xkftw(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/fs2xkftw(vs.71).aspx)
請參閱這個說明文件,如錯誤處理的相關詳細資訊,以及一般的 Dispose 方法的範例。

其他相關資訊

基底類別必須包含一個多載的組 Dispose 方法。 第一個實例的範例程式碼後面的是不含參數,版本,而且第二個執行個體接受布林 (Boolean) 參數:
'Method that is called by Public to ensure TRUE is passed to Dispose
Public Overloads Notoverridable Sub Dispose()
    Dispose( TRUE )
    ' Take yourself off of the finalization queue.
    GC.SuppressFinalize(Me)
End Sub

'Method that does the actual disposal of resources
Protected Overloads Overridable Sub Dispose(ByVal disposing As Boolean)
    'Clean Up Resources
End Sub
				

Dispose () 是當物件處置的物件已建立程式碼中時,就會呼叫的方法。這是 公用 的方法,因此它可以被用類別的執行個體存在時。 Dispose () 方法再呼叫 Dispose(Boolean) 方法,並傳遞值為 TRUEDispose(Boolean) 方法負責清除類別的資源。
當類別衍生自基底類別時,只有 Dispose(Boolean) 方法需要被覆寫。所有資源-清理為衍生類別將會都執行在這個覆寫的方法,並再呼叫 Dispose(Boolean) 方法基底類別。下列是函式覆寫基底類別的一個基本範例:
Protected Overloads Overrides Sub Dispose(disposing As Boolean)
   'Clean Up Resources
   MyBase.Dispose( disposing )
End Sub
				
的衍生的類別不需要 Dispose () 方法,因為該方法繼承自基底類別。當在衍生類別的執行個體上呼叫 Dispose () 時,Dispose () 會使用 Dispose(Boolean) 的衍生的類別,而不是基底類別中的一個。請務必再的衍生類別 Dispose(Boolean) 方法呼叫 Dispose(Boolean) 方法的基底類別。這是透過 MyBase.Dispose(disposing) 方法的方式。必須呼叫基底類別的 [Dispose(Boolean) 方法,以確保基底類別的資源也處置。
Dispose () 是物件的做為進入點的處置,並確保 TRUE 會傳遞至 Dispose(Boolean) 方法公開存取。FALSE 應該傳遞只有當藉由執行階段或 Finalize 方法呼叫 Dispose(Boolean) 方法。當傳遞 FALSE 時,會處置不受管理的資源。當傳遞 TRUE 時,會處置 Managed Unmanaged 資源。
Visual Studio 開發環境會插入程式碼,以覆寫成類別繼承系統物件 (比方說 繼承 System.Windows.Forms.TextBox) 的 Dispose () 方法。這是由選取 [覆寫,然後按一下 [Dispose () 執行從功能表 (在預設情況下的 [程式碼] 視窗的上方)。會插入程式碼看起來類似下列畫面:
Public Overloads Overrides Sub Dispose()
   'Clean Up Resources
End Sub
				
如果這完成會引發任何編譯錯誤。不過,衍生的類別在執行階段載入時, 您會收到執行階段錯誤訊息類似下列:
system.windows.forms.dll 中發生未處理的例外狀況的型別 'System.TypeLoadException'。

其他資訊: 方法實作所參考的宣告不能為最終方法。型別: ClassLibrary1.UserControl1。組件: Dispose。
注意: 的 類型 值會是在上述範例不同。就是類別的只是類別的嘗試使用不當覆寫的 Dispose () 方法名稱。
若要更正這個問題,只是多載 Dispose(Boolean) 方法代替 Dispose (),並確定呼叫針對 Dispose(Boolean) 方法的基底類別進行與 TRUE 會傳遞給它。

注意: 像 虛擬 關鍵字在 C# 和 C + + 中使用 Visual Basic.NET 中或在 Visual Basic 2005 中,可覆寫 關鍵字。 方法會依預設 NotOverridable 都是。

?考

相關的說明主題

這篇文章中的資訊適用於:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
關鍵字:?
kbmt kbvs2005swept kbvs2005applies kberrmsg kbinfo KB315528 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:315528? (http://support.microsoft.com/kb/315528/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。