CA2215: Metody Dispose by měly volat uvolnění třídy Base
Název_typu |
DisposeMethodsShouldCallBaseClassDispose |
CheckId |
CA2215 |
Kategorie |
Microsoft.Usage |
Změnit rozdělení |
Bez rozdělení |
Příčina
Typ, který implementuje IDisposable zdědí typ, který implementuje také IDisposable.Dispose Nevolá metodu zdědění typu Dispose metoda nadřazeného typu.
Popis pravidla
Pokud typ dědí z jednorázových typu, musí volat Dispose ze základního typu v rámci vlastní metodu Dispose metoda.Základní typ metody Dispose zajišťuje vydání žádné prostředky, vytvořené podle základního typu.
Jak opravit porušení
Porušení tohoto pravidla opravíte volání base.Dispose in your Dispose method.
Při potlačení upozornění
Je bezpečné potlačí upozornění od tohoto pravidla, pokud volání base.Dispose dojde k volání úroveň hlubší než pravidla kontroly.
Příklad
Následující příklad ukazuje typ TypeA , implementuje IDisposable.
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);
}
}
}
Následující příklad ukazuje typ TypeB , zdědí typ TypeA a správně volá jeho Dispose metoda.
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