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 base
a Dispose .Dispose metódust.
Mikor kell letiltani a figyelmeztetéseket?
Nyugodtan letilthatja a szabály figyelmeztetését, ha a .Dispose hívása base
mé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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: