CA2215: Dispose メソッドから基本クラスの破棄を呼び出します
TypeName |
DisposeMethodsShouldCallBaseClassDispose |
CheckId |
CA2215 |
カテゴリ |
Microsoft.Usage |
互換性に影響する変更点 |
なし |
原因
System.IDisposable を実装する型が、IDisposable も実装する型から継承しています。 型を継承する Dispose メソッドで、親の型の Dispose メソッドを呼び出していません。
規則の説明
型が、破棄できる型から継承している場合、使用している Dispose メソッド内から基本型の 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