CA2216: Az eldobható típusoknak véglegesítőt kell deklarálniuk
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA2216 |
Cím | Az eldobható típusoknak véglegesítőt kell deklarálniuk |
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 9-ben | Nem |
A nem felügyelt erőforrások használatára javaslatot tevő mezőket implementáló System.IDisposabletípus nem implementál véglegesítőt a leírtak szerint System.Object.Finalize.
A szabály megsértése akkor jelenik meg, ha az eldobható típus a következő típusú mezőket tartalmazza:
A szabály megsértésének kijavításához implementáljon egy véglegesítőt, amely meghívja a metódust Dispose .
A szabály figyelmeztetését nyugodtan letilthatja, ha a típus nem a IDisposable nem felügyelt erőforrások felszabadítására szolgál.
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 CA2216
// The code that's violating the rule is on this line.
#pragma warning restore CA2216
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.CA2216.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Az alábbi példa egy olyan típust mutat be, amely megsérti ezt a szabályt.
public class DisposeMissingFinalize : IDisposable
{
private bool disposed = false;
private IntPtr unmanagedResource;
[DllImport("native.dll")]
private static extern IntPtr AllocateUnmanagedResource();
[DllImport("native.dll")]
private static extern void FreeUnmanagedResource(IntPtr p);
DisposeMissingFinalize()
{
unmanagedResource = AllocateUnmanagedResource();
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
// Dispose of resources held by this instance.
FreeUnmanagedResource(unmanagedResource);
disposed = true;
// Suppress finalization of this disposed instance.
if (disposing)
{
GC.SuppressFinalize(this);
}
}
}
public void Dispose()
{
Dispose(true);
}
// Disposable types with unmanaged resources implement a finalizer.
// Uncomment the following code to satisfy rule:
// DisposableTypesShouldDeclareFinalizer
// ~TypeA()
// {
// Dispose(false);
// }
}
.NET-visszajelzés
A(z) .NET egy nyílt forráskód projekt. Visszajelzés adásához válasszon egy hivatkozást: