IDisposable
IDisposable ile yönetilmeyen kaynakları serbest bırakmayı öğrenirsin.
IDisposable arayüzü
IDisposable arayüzü tek bir metot içerir: Dispose(). Yönetilmeyen kaynakları (dosya, soket, veritabanı bağlantısı) serbest bırakmak için kullanılır.
GC bu kaynakları otomatik boşaltamaz; bu yüzden kullanıcı Dispose() çağrısı yapmalıdır. Bir sınıfı IDisposable yaparak "beni işin bitince kapat" demiş olursun. Bu, programın ölçülebilir ve öngörülebilir kaynak davranışı sergilemesini sağlar.
Dispose deseni
IDisposable uygulanırken genellikle şu desen kullanılır: Dispose(true) ile kaynakları serbest bırak, GC.SuppressFinalize(this) ile finalizer'ı iptal et.
Bir finalizer (~Logger()) tanımlarsan, dispose edilmezse GC yakaladığında kaynaklar yine serbest kalır. Bu, yönetilmeyen kaynağın sızmasını önleyen güvenli bir ağdır ve kodun beklenmedik koşullarda bile kaynaklarını geri kazanmasına yardımcı olur.
Uygulama Logger sınıfına Dispose ekle
Logger sınıfı IDisposable uygular. public void Dispose() metodunu ekle; gövdede Console.WriteLine("Kapatıldı"); yaz. Main'de using var l = new Logger(); kullan.
Örnek çözümü göster
public void Dispose() { Console.WriteLine("Kapatıldı"); } yaz. Main'de using var l = new Logger();
Örnek çözüm:
using System;
class Logger : IDisposable
{
public void Dispose()
{
Console.WriteLine("Kapatıldı");
}
}
class Program
{
static void Main()
{
using var l = new Logger();
}
}
Kendini test et
-
Dispose metodunu tamamla
public void ____() { _handle.Close(); }Cevabı göster
public void Dispose() { _handle.Close(); } -
IDisposable hangi kaynağı serbest bırakır?
- Yönetilmeyen kaynakları (dosya, soket)
- Yalnızca string'leri
- Sadece yönetilen dizileri
- Thread'leri
Cevabı göster
Yönetilmeyen kaynakları (dosya, soket) — Doğru. IDisposable dosya, soket gibi yönetilmeyen kaynaklar içindir.
-
Kaynak yönetim eşleşmeleri
- IDisposable
- Dispose() metodu
- GC.SuppressFinalize
- Finalizer'ı iptal eder
- ~Logger()
- Finalizer (yıkıcı)
- using
- Otomatik Dispose