CA2215:Dispose 方法應該呼叫基底類別處置
型別名稱 |
DisposeMethodsShouldCallBaseClassDispose |
CheckId |
CA2215 |
分類 |
Microsoft.Usage |
中斷變更 |
不中斷 |
原因
實作 System.IDisposable 的型別會繼承自同樣實作 IDisposable 的型別。但是繼承型別的 Dispose 方法卻未呼叫父型別的 Dispose 方法。
規則描述
如果型別會繼承自可處置的型別,則必須從本身的 Dispose 方法呼叫基底型別 (Base Type) 的 Dispose 方法。呼叫基底型別方法 Dispose,確保會釋放由基底型別所建立的任何資源。
如何修正違規
若要修正此規則的違規情形,請呼叫 Dispose 方法中的 base.Dispose。
隱藏警告的時機
如果 base.Dispose 的呼叫層級比規則的檢查層級更深層,則您可以放心地隱藏這項規則的警告。
範例
在下列範例中,程式碼會顯示實作 IDisposable 的型別 TypeA。
using System;
namespace UsageLibrary
{
public class TypeA :IDisposable
{
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// Dispose managed resources
}
// Free native resources
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// Disposable types implement a finalizer.
~TypeA()
{
Dispose(false);
}
}
}
在下列範例中,程式碼會顯示繼承自型別 TypeA 並正確呼叫 Dispose 方法的型別 TypeB。
Imports System
Namespace UsageLibrary
Public Class TypeB
Inherits TypeA
Protected Overrides Sub Finalize()
Try
Dispose(False)
Finally
MyBase.Finalize()
End Try
End Sub
End Class
End Namespace