Kezdőoldal » Számítástechnika » Programozás » A könyvben miért van így...

A könyvben miért van így megvalósítva a IDisposable? (c#)

Figyelt kérdés

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);

}

}


2014. aug. 24. 02:08
 1/2 A kérdező kommentje:

"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?

2014. aug. 24. 02:17
 2/2 anonim válasza:

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:

[link]

2014. aug. 24. 02:56
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!