Middle
Čo je rozhranie IDisposable a na čo sa v C# používa?
sobes.tech AI
Odpoveď od AI
IDisposable — rozhranie, ktoré poskytuje mechanizmus na uvoľnenie neovládaných zdrojov. Obsahuje metódu Dispose().
Používa sa na:
- Uvoľnenie neovládaných zdrojov: ako sú deskriptory súborov, pripojenia k databázam, sieťové sokety.
.NETtieto zdroje nedokáže automaticky spravovať. - Čistenie po použití: zabezpečuje, že objekty, ktoré spotrebúvajú veľa zdrojov, budú správne uvoľnené, aj keď dôjde k výnimkám.
- Použitie s operátorom
using: operátorusingautomaticky zavolá metóduDispose()pri ukončení bloku kódu, aj keď dôjde k výnimke. Toto je preferovaný spôsob používania objektov, ktoré implementujúIDisposable.
Príklad implementácie:
public class MyResource : IDisposable
{
// Simulácia neovládaného zdroja
private bool isDisposed = false;
private IntPtr unmanagedPointer;
public MyResource()
{
// Pridelenie neovládaného zdroja
unmanagedPointer = System.Runtime.InteropServices.Marshal.AllocHGlobal(100);
}
// Metóda Dispose z rozhrania IDisposable
public void Dispose()
{
Dispose(true);
// Potlačenie finalizácie, pretože zdroje sú už uvoľnené
GC.SuppressFinalize(this);
}
// Virtuálna metóda na implementáciu logiky uvoľnenia
protected virtual void Dispose(bool disposing)
{
if (!isDisposed)
{
if (disposing)
{
// Uvoľnenie spravovaných zdrojov, ak existujú
// ...
}
// Uvoľnenie neovládaných zdrojov
System.Runtime.InteropServices.Marshal.FreeHGlobal(unmanagedPointer);
unmanagedPointer = IntPtr.Zero;
isDisposed = true;
}
}
// Finalizátor (destruktor) na uvoľnenie zdrojov, ak `Dispose` nebol explicitne volaný
~MyResource()
{
Dispose(false);
}
}
Príklad použitia s using:
using (var resource = new MyResource())
{
// Práca so zdrojom
// ...
} // `Dispose()` sa automaticky zavolá pri opustení bloku `using`