Condividi tramite


CA2220: I finalizzatori devono chiamare il finalizzatore della classe base

Articolo Valore
ID regola CA2220
Category Microsoft.Usage
Modifica Nessuna interruzione

Causa

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

Nota

Questa regola è stata deprecata. Per altre informazioni, vedere Regole deprecate.

Descrizione regola

La finalizzazione deve essere propagata tramite la gerarchia di ereditarietà. Per garantire questo problema, i tipi devono chiamare il metodo della classe Finalize di base dall'interno del proprio Finalize metodo. Il compilatore C# aggiunge automaticamente la chiamata al finalizzatore della classe di base.

Come correggere le violazioni

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

Quando eliminare gli avvisi

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

Esempio

Nell'esempio di Visual Basic seguente viene illustrato un tipo TypeB che chiama correttamente il Finalize metodo nella relativa classe di 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

Vedi anche