CodeBlanks Logo Icon CodeBlanks

IDisposable

C# kursu · Uzman · Ders 2/47

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

  1. Dispose metodunu tamamla

    public void ____() { _handle.Close(); }
    Cevabı göster
    public void Dispose() { _handle.Close(); }
  2. 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.

  3. Kaynak yönetim eşleşmeleri

    IDisposable
    Dispose() metodu
    GC.SuppressFinalize
    Finalizer'ı iptal eder
    ~Logger()
    Finalizer (yıkıcı)
    using
    Otomatik Dispose

Uzman bölümündeki tüm dersler