Udostępnij za pośrednictwem


CA2215: Metody zbycia powinna wywołać zbycia klasy podstawowej

TypeName

DisposeMethodsShouldCallBaseClassDispose

CheckId

CA2215

Kategoria

Microsoft.Usage

Zmiana kluczowa

Niekluczowa

Przyczyna

Typ, który implementuje System.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

Zobacz też

Informacje

Implementing Finalize and Dispose

System.IDisposable