Condividi tramite


CA2220: I finalizzatori devono chiamare il finalizzatore della classe base

TypeName

FinalizersShouldCallBaseClassFinalizer

CheckId

CA2220

Category

Microsoft.Usage

Breaking Change

Non sostanziale

Causa

Un tipo che esegue l'override di Object.Finalize non chiama il metodo Finalize nella relativa classe base.

Descrizione della regola

La finalizzazione deve essere propagata tramite la gerarchia di ereditarietà. A tale scopo, i tipi devono chiamare il metodo Finalize della propria classe base dal proprio metodo Finalize. Il compilatore C# aggiunge automaticamente la chiamata al finalizzatore della classe base.

Come correggere le violazioni

Per correggere una violazione di questa regola, chiamare il metodo Finalize del tipo di base dal metodo Finalize.

Esclusione di avvisi

Non escludere un avviso da questa regola. Alcuni compilatori destinati a Common Language Runtime inseriscono una chiamata al finalizzatore del tipo di base in Microsoft intermediate language (MSIL). Se viene segnalato un avviso da questa regola, il compilatore non inserisce la chiamata ed è necessario aggiungerla nel codice.

Esempio

Nell'esempio di Visual Basic illustrato di seguito viene illustrato un tipo TypeB che chiama correttamente il metodo Finalize nella relativa classe base.

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

Vedere anche

Riferimenti

Implementazione dei metodi Finalize e Dispose per la pulizia delle risorse non gestite