Udostępnij za pośrednictwem


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

Zobacz też

Informacje

IDisposable

Inne zasoby

Implementing Finalize and Dispose