Sdílet prostřednictvím


CA2220: Finalizační metody by měly volat finalizační metodu třídy Base

TypeName

FinalizersShouldCallBaseClassFinalizer

CheckId

CA2220

Kategorie

Microsoft.Usage

Narušující změna

Nenarušující

Příčina

Typ přepisující metodu Object.Finalize nevolá metodu Finalize v základní třídě.

Popis pravidla

Finalizační metoda musí být šířena přes hierarchii dědičnosti.Chcete-li toto zajistit, musí typy volat metodu Finalize v jejich základní třídě z vlastní metody Finalize.Kompilátor jazyka C# automaticky přidává volání finalizační metody základní třídy.

Jak vyřešit porušení

Chcete-li opravit porušení tohoto pravidla, zavolejte metodu základního typu Finalize z vlastní metody Finalize.

Kdy potlačit upozornění

Nepotlačujte upozornění na toto pravidlo.Některé kompilátory zaměřené na modul CLR vkládají volání finalizační metody základního typu do jazyka MSIL.Je-li zobrazeno upozornění tohoto pravidla, kompilátor volání nevkládá a je zapotřebí jej přidat do kódu.

Příklad

Následující příklad v jazyce Visual Basic ukazuje typ TypeB , který správně volá metodu Finalize ve své základní třídě.

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é

Další zdroje

Implementing Finalize and Dispose