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