Middle
Τι είναι η διεπαφή IDisposable και πού χρησιμοποιείται στη C#;
sobes.tech AI
Απάντηση από AI
IDisposable — bu, idarə olunmayan resursların sərbəst buraxılması mexanizmini təmin edən interfeysdir. O, Dispose() metodunu ehtiva edir.
O, aşağıdakı məqsədlər üçün istifadə olunur:
- İdarə olunmayan resursların sərbəst buraxılması: fayl deskriptorları, verilənlər bazası əlaqələri, şəbəkə soketləri kimi.
.NETbu resursları avtomatik idarə edə bilməz. - İstifadədən sonra təmizləmə: resursdan çox istifadə edən obyektlərin düzgün şəkildə sərbəst buraxılmasını təmin edir, hətta istisnalar baş verərsə belə.
usingoperatoru ilə birlikdə istifadə:usingoperatoru kod blokundan çıxarkənDispose()metodunu avtomatik çağırır, hətta istisna baş verərsə belə. Bu,IDisposable-i həyata keçirən obyektlərin istifadə olunması üçün üstün yoldur.
İcrası nümunəsi:
public class MyResource : IDisposable
{
// İdarə olunmayan resursun simulasyonu
private bool isDisposed = false;
private IntPtr unmanagedPointer;
public MyResource()
{
// İdarə olunmayan resursun ayrılması
unmanagedPointer = System.Runtime.InteropServices.Marshal.AllocHGlobal(100);
}
// `IDisposable` interfeysindən `Dispose()` metodu
public void Dispose()
{
Dispose(true);
// Finalizasiyanı ləğv et, çünki resurslar artıq azad olunub
GC.SuppressFinalize(this);
}
// Resursların azad olunması üçün virtual metod
protected virtual void Dispose(bool disposing)
{
if (!isDisposed)
{
if (disposing)
{
// İdarə olunan resursların azad olunması, varsa
// ...
}
// İdarə olunmayan resursların azad olunması
System.Runtime.InteropServices.Marshal.FreeHGlobal(unmanagedPointer);
unmanagedPointer = IntPtr.Zero;
isDisposed = true;
}
}
// `Dispose` çağırılmadıqda resursları azad etmək üçün finalizator (destruktor)
~MyResource()
{
Dispose(false);
}
}
using ilə istifadə nümunəsi:
using (var resource = new MyResource())
{
// Resursla işləmək
// ...
} // `Dispose()` avtomatik çağırılır, `using` blokundan çıxarkən