Middle
IDisposable интерфейси эмне жана ал C#да эмне үчүн колдонулат?
sobes.tech AI
AIден жооп
IDisposable — бул интерфейс, ал which автоматтык түрдө башкарылбаган ресурстарды бошотуу механизмин камсыздайт. Ал бир метод 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()` автоматтык түрдө чакырылат, `using` блоктон чыкканда