Megosztás a következőn keresztül:


CA2215: Az elidegenítési módszereknek alaposztály-elidegenítést kell hívniuk

Tulajdonság Érték
Szabályazonosító CA2215
Cím Az elidegenítési módszereknek alaposztály-elidegenítést kell hívniuk
Kategória Használat
A javítás kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Nem

Ok

A implementálási System.IDisposable típus öröklődik egy olyan típustól, amely szintén implementál IDisposable. Az Dispose öröklő típus metódusa nem hívja meg a Dispose szülőtípus metódusát.

Szabály leírása

Ha egy típus egy eldobható típustól öröklődik, az Dispose alaptípus metódusát a saját Dispose metódusán belül kell meghívnia. Az alaptípus Dispose metódusának meghívásával biztosítható, hogy az alaptípus által létrehozott erőforrások felszabadulnak.

Szabálysértések kijavítása

A szabály megsértésének kijavításához hívja meg basea Dispose .Dispose metódust.

Mikor kell letiltani a figyelmeztetéseket?

Nyugodtan letilthatja a szabály figyelmeztetését, ha a .Dispose hívása basemélyebb hívási szinten történik, mint amennyit a szabály ellenőriz.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

#pragma warning disable CA2215
// The code that's violating the rule is on this line.
#pragma warning restore CA2215

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

[*.{cs,vb}]
dotnet_diagnostic.CA2215.severity = none

További információ: Kódelemzési figyelmeztetések letiltása.

Példa

Az alábbi példa két típust mutat be, TypeA amelyek implementálják IDisposable, és TypeB a típustól TypeA öröklődnek, és helyesen meghívják annak metódusát 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);
            }
        }
    }
}

Kapcsolódó információk