CA2215: Metody Dispose powinny wywoływać operację usuwania klasy podstawowej
TypeName |
DisposeMethodsShouldCallBaseClassDispose |
CheckId |
CA2215 |
Kategoria |
Microsoft.Usage |
Zmiana kluczowa |
Niekluczowa |
Przyczyna
Typ, który implementuje IDisposable dziedziczy po typie, który również implementuje IDisposable.Metoda Dispose typu dziedziczącego nie wywołuje metody Dispose typu nadrzędnego.
Opis reguły
Jeśli typ dziedziczy z typu usuwalnego, musi on wywołać metodę Dispose typu podstawowego we własnej metodzie Dispose.Wywołanie metody Dispose typu podstawowego gwarantuje, że wszystkie zasoby utworzone przez typ bazowy zostaną zwolnione.
Jak naprawić naruszenia
Aby naprawić naruszenie tej reguły, należy wywołać base.Dispose w swojej metodzie Dispose.
Kiedy pominąć ostrzeżenia
Bezpiecznie jest pomijać ostrzeżenia dotyczące tej reguły, jeśli wywołanie base.Dispose występuje na niższym poziomie wywoływania niż reguła jest w stanie sprawdzić.
Przykład
Poniższy przykład pokazuje typ TypeA, który 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);
}
}
}
Poniższy przykład pokazuje typ TypeB, który dziedziczy po typie TypeA i poprawnie wywołuje jego metodę Dispose.
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