[英]Finalizers with Dispose() in C#
請參閱MSDN中的代碼示例:( http://msdn.microsoft.com/en-us/library/b1yfkh5e ( v=VS.100 ) .aspx )
// Design pattern for a base class.
public class Base: IDisposable
{
private bool disposed = false;
//Implement IDisposable.
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// Free other state (managed objects).
}
// Free your own state (unmanaged objects).
// Set large fields to null.
disposed = true;
}
}
// Use C# destructor syntax for finalization code.
~Base()
{
// Simply call Dispose(false).
Dispose (false);
}
}
在Dispose()實現中,它調用GC.SupressFinalize();,但提供了一個析構函數來完成對象。
調用GC.SuppressFinalize()時為析構函數提供實現有什么意義?
只是有點混淆意圖是什么?
如果有人忘記調用Dispose,終結器將(最終)運行以進行最終清理。 由於最終確定會損害性能,理想情況下沒有人會忘記Dispose。 使用構造對此有所幫助。
有兩種情況:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.