Middle
Kas ir interfeiss IDisposable un kam tas tiek izmantojams C#?
sobes.tech AI
Atbilde no AI
IDisposable — tas irerfeiss, kas nodrošina nevaldītu resursu atbrīvošanas mehānismu. Tas satur vienu metodi Dispose():
Izmanto:
- Nevaldītu resursu atbrīvošanai: piemēram, failu deskriptorus, datu bāzes savienojumus, tīkla soketus.
.NETautomātiski nenodrošina šo resursu pārvaldību. - Pēc lietošanas tīrīšanai: nodrošina, ka resursu smagie objekti tiks pareizi atbrīvoti, pat ja notiek izņēmumi.
- Koplietojot ar
usingoperatoru:usingoperators automātiski izsaucDispose()metodi, kad beidzas koda bloks, pat ja notiek izņēmums. Tas ir ieteicamākais veids, kā izmantotIDisposablerealizējošus objektus.
Piemērs realizācijai:
public class MyResource : IDisposable
{
// Imite nevaldītu resursu
private bool isDisposed = false;
private IntPtr unmanagedPointer;
public MyResource()
{
// Nevaldīta resursa piešķiršana
unmanagedPointer = System.Runtime.InteropServices.Marshal.AllocHGlobal(100);
}
// `IDisposable` interfeisa `Dispose()` metode
public void Dispose()
{
Dispose(true);
// Finalizācijas atcelšana, jo resursi jau ir atbrīvoti
GC.SuppressFinalize(this);
}
// Visiens metode resursu atbrīvošanai
protected virtual void Dispose(bool disposing)
{
if (!isDisposed)
{
if (disposing)
{
// Pārvaldītu resursu atbrīvošana, ja ir
// ...
}
// Nevaldītu resursu atbrīvošana
System.Runtime.InteropServices.Marshal.FreeHGlobal(unmanagedPointer);
unmanagedPointer = IntPtr.Zero;
isDisposed = true;
}
}
// Finalizators (desturktors), ja `Dispose` nav izsaukts
~MyResource()
{
Dispose(false);
}
}
using piemērs:
using (var resource = new MyResource())
{
// Darbs ar resursu
// ...
} // `Dispose()` automātiski izsauksies, izejot no `using` bloka