CodeBlanks Logo Icon CodeBlanks

finally bloğu

C# kursu · Başlangıç · Ders 107/116

finally ile hata olsa bile çalışan temizlik kodunu öğrenirsin.

finally bloğu ne işe yarar?

finally bloğu, try bloğundan nasıl çıkılırsa çıkılsın (istisna olsun ya da olmasın) her durumda çalışır. Genellikle kaynak temizliği için kullanılır: dosyaları kapatmak, bağlantıları bırakmak ya da bayrakları sıfırlamak gibi.

Örnek: try { ... } finally { CloseFile(); } yapısında CloseFile her koşulda çağrılır. İstisna fırlatılıp catch bloğuna geçilse bile finally yine çalışır. Böylece kaynak sızıntısı önlenebilir.

try/catch/finally sırası

Bu üç bloğun sırası şöyledir: önce try, sonra varsa catch blokları, en son ise varsa finally. catch ve finally ikisi birden bulunabilir; ancak try'sızs hiçbiri olmaz.

Çalışma akışı: try bloğunda istisna olursa uygun catch çalışır; sonra finally yürütülür. İstisna olmazsa catch atlanır, yine finally yürütülür. Yalnızca Environment.Exit gibi ani çıkışlar finally'yi atlayabilir.

Kaynak temizliği

Gerçek projelerde finally bloğu çoğunlukla kaynak temizliği için kullanılır. Bir dosya açıldıktan sonra bir hata oluşsa bile dosyayı kapatmak istersin; bir veritabanı bağlantısı açıldıktan sonra ne olursa olsun bağlantıyı bırakmak gerekir.

Örnek: try { OpenFile(); ReadData(); } finally { CloseFile(); } yapısında ReadData hata fırlatsa bile CloseFile çağrılır. Bu, kaynak sızdırmadan güvenli kod yazmanın standart bir yoludur. Modern C#'ta using deyimi de benzer amaca hizmet eder.

Uygulama try/finally ile akış yazdır

try bloğu içinde Console.WriteLine("Başladı"); yaz. finally bloğu içinde Console.WriteLine("Bitti"); yaz. İstisna olmadığından her iki mesaj da yazdırılır.

Örnek çözümü göster
try { Console.WriteLine("Başladı"); } ve finally { Console.WriteLine("Bitti"); } yaz.
Örnek çözüm:
using System;

class Program
{
    static void Main()
    {
        try
        {
            Console.WriteLine("Başladı");
        }
        finally
        {
            Console.WriteLine("Bitti");
        }
    }
}

Kendini test et

  1. finally bloğu ne zaman çalışır?

    try { ... }
    catch { ... }
    finally { ... }
    • Yalnızca hata olunca
    • Yalnızca hata olmayınca
    • Her durumda
    • Yalnızca catch çalışınca
    Cevabı göster

    Her durumda — Doğru! finally her durumda çalışır; hata olsa da olmasa da.

  2. finally anahtar kelimesi

    try { int.Parse("x"); }
    catch { }____ { Console.WriteLine("Temizlik"); }
    Cevabı göster
    try { int.Parse("x"); }
    catch { }finally { Console.WriteLine("Temizlik"); }
  3. Bloğu göreviyle eşleştir

    try
    Riskli kod
    catch
    Hatayı yakalar
    finally
    Temizlik

Başlangıç bölümündeki tüm dersler