A könyvben miért van így megvalósítva a IDisposable? (c#)
A suppressfinalize-nál megjelölődik szemétnek az objektum és amikor sorra kerül nem hívódik meg a "desktruktor". Managed memóriát sehogy nem lehet felszabadítani, ezt a .NET kezeli.
És van ez a kód:
class DisposableClass : IDisposable
{
private bool disposed = false;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if(!disposed)
{
if(disposing)
{
// managed erforrások felszabadítása ide mit kell írnom
/* c# ben nem ajánlott a gc hívni akkor minek ez a blokk ide?Minek ez a blokk ide ha managed memóriát nem lehet kézel felszabadítani mert ez a .net kezeli?*/
}
// unmanaged erforrások felszabadítása
disposed = true;
}
}
~DisposableClass()
{
Dispose(false);
}
}
"pastebin:/mX8L9tXN"
Na szóval ha kézzel hívom a Dispose metódust,akkor az történik,hogy a disposing true értékkel lesz ellátva ami azt jelenti,hogy kézzel szabadítsam fel a managed erőforrásokat????És utána az unmanaged erőforrásokat ami érthető és végül megjelöljük szemétnek az objektet.
Ha ez igaz:
Managed memóriát sehogy nem lehet felszabadítani, ezt a .NET kezeli.
Akkor hogy lehetséges az,hogy a könyv írójában egy példájában az áll,hogy managed erőforrások felszabadítása?
ha jól látom, akkor ha a GC gyűjti be az objektumot, akkor a Dispose(false) hívódik meg, ha te, kézzel szabadítod fel a paraméter nélküli, publikus Dispose() meghívásával, akkor pedig a Dispose(true)
(ha kézzel hívtad meg, a GC.SuppressFinalize(this) kiveszi az aktuális objektumot a felszabadítandóak listájából, így nem hívódik meg majd még egyszer automatikusan a Dispose())
a managed memóriát pl. más objektumokhoz tartozó Dispose() vagy pl. adatfolyamoknál még a Close() meghívásával tudod felszabadítani
itt van egyébként az IDisposable interfész dokumentációja:
További kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!