Sdílet prostřednictvím


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

Viz také

Referenční dokumentace

IDisposable

Další zdroje

Implementing Finalize and Dispose