Middle
Co je to rozhraní IDisposable a k čemu se v C# používá?
sobes.tech AI
Odpověď od AI
IDisposable — je rozhraní, které poskytuje mechanismus pro uvolnění neřízených zdrojů. Obsahuje metodu Dispose().
Používá se pro:
- Uvolnění neřízených zdrojů: jako jsou souborové deskriptory, připojení k databázím, síťové sokety.
.NETtyto zdroje neumí automaticky spravovat. - Čištění po použití: zajišťuje, že objekty, které spotřebovávají hodně zdrojů, budou správně uvolněny, i když dojde k výjimkám.
- Spolu s operátorem
using: operátorusingautomaticky zavolá metoduDispose()po ukončení bloku kódu, i když dojde k výjimce. Toto je preferovaný způsob používání objektů, které implementujíIDisposable.
Příklad implementace:
public class MyResource : IDisposable
{
// Simulace neřízeného zdroje
private bool isDisposed = false;
private IntPtr unmanagedPointer;
public MyResource()
{
// Přidělení neřízeného zdroje
unmanagedPointer = System.Runtime.InteropServices.Marshal.AllocHGlobal(100);
}
// Metoda Dispose z rozhraní IDisposable
public void Dispose()
{
Dispose(true);
// Potlačení finalizace, protože zdroje jsou již uvolněny
GC.SuppressFinalize(this);
}
// Virtuální metoda pro implementaci logiky uvolnění
protected virtual void Dispose(bool disposing)
{
if (!isDisposed)
{
if (disposing)
{
// Uvolnění řízených zdrojů, pokud existují
// ...
}
// Uvolnění neřízených zdrojů
System.Runtime.InteropServices.Marshal.FreeHGlobal(unmanagedPointer);
unmanagedPointer = IntPtr.Zero;
isDisposed = true;
}
}
// Finalizátor (destruktor) pro uvolnění zdrojů, pokud nebyl explicitně volán `Dispose`
~MyResource()
{
Dispose(false);
}
}
Příklad použití s using:
using (var resource = new MyResource())
{
// Práce s prostředkem
// ...
} // `Dispose()` je voláno automaticky při opuštění bloku `using`