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