Middle
Ce este interfața IDisposable și pentru ce este utilizată în C#?
sobes.tech AI
Răspuns de la AI
IDisposable — este o interfață care oferă un mecanism pentru eliberarea resurselor necontrolate. Conține o metodă Dispose().
Este utilizată pentru:
- Eliberarea resurselor necontrolate: precum descriptorii de fișiere, conexiunile la baze de date, socket-urile de rețea.
.NETnu poate gestiona automat aceste resurse. - Curățarea după utilizare: asigură că obiectele care consumă multe resurse sunt eliberate corect, chiar dacă apar excepții.
- Utilizarea împreună cu operatorul
using: operatorulusingapelează automat metodaDispose()la ieșirea din blocul de cod, chiar dacă apare o excepție. Este modul preferat de a utiliza obiecte care implementeazăIDisposable.
Exemplu de implementare:
public class MyResource : IDisposable
{
// Simulare resurs necontrolat
private bool isDisposed = false;
private IntPtr unmanagedPointer;
public MyResource()
{
// Alocare resursă necontrolată
unmanagedPointer = System.Runtime.InteropServices.Marshal.AllocHGlobal(100);
}
// Metoda `Dispose` din interfața `IDisposable`
public void Dispose()
{
Dispose(true);
// Anulare finalizare, deoarece resursele sunt deja eliberate
GC.SuppressFinalize(this);
}
// Metodă virtuală pentru implementarea logicii de eliberare
protected virtual void Dispose(bool disposing)
{
if (!isDisposed)
{
if (disposing)
{
// Eliberare resurse gestionate, dacă există
// ...
}
// Eliberare resurse necontrolate
System.Runtime.InteropServices.Marshal.FreeHGlobal(unmanagedPointer);
unmanagedPointer = IntPtr.Zero;
isDisposed = true;
}
}
// Finalizator (destructor) pentru eliberarea resurselor dacă `Dispose` nu a fost apelat explicit
~MyResource()
{
Dispose(false);
}
}
Exemplu de utilizare cu using:
using (var resource = new MyResource())
{
// Lucru cu resursa
// ...
} // `Dispose()` este apelat automat la ieșirea din blocul `using`