Middle
რა არის ინტერფეისი IDisposable და რა მიზნით გამოიყენება C#-ში?
sobes.tech AI
პასუხი AI-სგან
IDisposable — бу интерфейс, идарә ителмәгән ресурсларны азат итү механизмын тәэмин итә. Ул бер метод Dispose() кертә:
Кулланылышы:
- Идарә ителмәгән ресурсларны азат итү: Мәсәлән — файл дескрипторлары, мәгълүмат базаларына тоташулар, челтәр сокетлары.
.NETавтомат рәвештә бу ресурсларны идарә итми. - Кулланудан соң чистарту: Ул ресурслы объектларның дөрес азат ителүен гарантияли, хәтта искәрмәләр килеп чыкса да.
usingоператоры белән бергә куллану:usingоператоры автомат рәвештәDispose()методын чакыра, код блогыннан чыгу белән, хәтта искәрмә булса да. БуIDisposableреализлаган объектларны куллану өчен иң өстен ысул.
Куллану үрнәге:
public class MyResource : IDisposable
{
// Идарә ителмәгән ресурсның имитациясе
private bool isDisposed = false;
private IntPtr unmanagedPointer;
public MyResource()
{
// Идарә ителмәгән ресурсны бүлү
unmanagedPointer = System.Runtime.InteropServices.Marshal.AllocHGlobal(100);
}
// `IDisposable` интерфейсеннән `Dispose()` методы
public void Dispose()
{
Dispose(true);
// Финализацияне тыю, чөнки ресурслар инде азат ителгән
GC.SuppressFinalize(this);
}
// Виртуаль метод, азат итү логикасы өчен
protected virtual void Dispose(bool disposing)
{
if (!isDisposed)
{
if (disposing)
{
// Башкарылучы ресурсларны азат итү, әгәр бар икән
// ...
}
// Идарә ителмәгән ресурсларны азат итү
System.Runtime.InteropServices.Marshal.FreeHGlobal(unmanagedPointer);
unmanagedPointer = IntPtr.Zero;
isDisposed = true;
}
}
// Финализация (деструктор), әгәр `Dispose` аерым чакырылмаса
~MyResource()
{
Dispose(false);
}
}
using белән куллану:
using (var resource = new MyResource())
{
// Ресурс белән эшләү
// ...
} // `Dispose()` автомат рәвештә чакырыла