Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschappen | Weergegeven als | 
|---|---|
| Regel-id | CA2215 | 
| Titel | Verwijderingsmethoden moeten de basisklasse verwijderen aanroepen | 
| Categorie | Gebruik | 
| Oplossing is brekend of niet-brekend | Niet-brekend | 
| Standaard ingeschakeld in .NET 9 | Nee | 
Oorzaak
Een type dat wordt geïmplementeerd System.IDisposable , neemt over van een type dat ook wordt geïmplementeerd IDisposable. De Dispose methode van het overnemende type roept de Dispose methode van het bovenliggende type niet aan.
Beschrijving van regel
Als een type overneemt van een wegwerptype, moet het de Dispose methode van het basistype aanroepen vanuit een eigen Dispose methode. Als u de methode basistype Dispose aanroept, zorgt u ervoor dat alle resources die door het basistype zijn gemaakt, worden vrijgegeven.
Schendingen oplossen
Als u een schending van deze regel wilt oplossen, roept u basein uw Dispose methode aanDispose.
Wanneer waarschuwingen onderdrukken
Het is veilig om een waarschuwing van deze regel te onderdrukken als de aanroep naar base.Dispose plaatsvindt op een dieper aanroepniveau dan de regelcontroles.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA2215
// The code that's violating the rule is on this line.
#pragma warning restore CA2215
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA2215.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Opmerking
In het volgende voorbeeld ziet u twee typen, TypeA die worden geïmplementeerd IDisposableen TypeB die worden overgenomen van het type TypeA en de methode correct aanroept Dispose .
Namespace ca2215
    Public Class TypeA
        Implements IDisposable
        Protected Overridable Overloads Sub Dispose(disposing As Boolean)
            If disposing Then
                ' dispose managed resources
            End If
            
            ' free native resources
        End Sub
        Public Overloads Sub Dispose() Implements IDisposable.Dispose
            Dispose(True)
            GC.SuppressFinalize(Me)
        End Sub
        ' Disposable types implement a finalizer.
        Protected Overrides Sub Finalize()
            Dispose(False)
            MyBase.Finalize()
        End Sub
    End Class
    Public Class TypeB
        Inherits TypeA
        Protected Overrides Sub Dispose(disposing As Boolean)
            If Not disposing Then
                MyBase.Dispose(False)
            End If
        End Sub
    End Class
End Namespace
using System;
namespace ca2215
{
    public class TypeA : IDisposable
    {
        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                // Dispose managed resources
            }
            // Free native resources
        }
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        // Disposable types implement a finalizer.
        ~TypeA()
        {
            Dispose(false);
        }
    }
    public class TypeB : TypeA
    {
        protected override void Dispose(bool disposing)
        {
            if (!disposing)
            {
                base.Dispose(false);
            }
        }
    }
}