Middle
IDisposable arayüzü nedir ve C#'ta ne amaçla kullanılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
IDisposable — yönetilmeyen kaynakların serbest bırakılması için bir mekanizma sağlayan bir arayüzdür. Bir Dispose() yöntemi içerir.
Kullanım amaçları:
- Yönetilmeyen kaynakların serbest bırakılması: dosya tanımlayıcıları, veritabanı bağlantıları, ağ soketleri gibi.
.NETbu kaynakları otomatik olarak yönetemez. - Kullanımdan sonra temizlik: Kaynak yoğun nesnelerin doğru şekilde serbest bırakılmasını sağlar, hatta istisnalar oluşsa bile.
usingoperatörü ile birlikte kullanımı:usingoperatörü, kod bloğu sonundaDispose()yöntemini otomatik olarak çağırır, hatta istisna olsa bile. Bu,IDisposableuygulayan nesnelerin kullanımı için tercih edilen yoldur.
Uygulama örneği:
public class MyResource : IDisposable
{
// Yönetilmeyen kaynağın simülasyonu
private bool isDisposed = false;
private IntPtr unmanagedPointer;
public MyResource()
{
// Yönetilmeyen kaynağın tahsisi
unmanagedPointer = System.Runtime.InteropServices.Marshal.AllocHGlobal(100);
}
// `IDisposable` arayüzünden Dispose yöntemi
public void Dispose()
{
Dispose(true);
// Finalizasyonu engelle, çünkü kaynaklar zaten serbest bırakıldı
GC.SuppressFinalize(this);
}
// Serbest bırakma mantığını uygulamak için sanal yöntem
protected virtual void Dispose(bool disposing)
{
if (!isDisposed)
{
if (disposing)
{
// Yönetilen kaynakları serbest bırakma, varsa
// ...
}
// Yönetilmeyen kaynakları serbest bırakma
System.Runtime.InteropServices.Marshal.FreeHGlobal(unmanagedPointer);
unmanagedPointer = IntPtr.Zero;
isDisposed = true;
}
}
// Kaynaklar manuel olarak çağrılmadığında serbest bırakmak için finalizer (yıkıcı)
~MyResource()
{
Dispose(false);
}
}
using ile kullanım örneği:
using (var resource = new MyResource())
{
// Kaynakla çalışma
// ...
} // Dispose() otomatik olarak çağrılır, using bloğundan çıkarken