C#
finally bloğu
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
-
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.
-
finally anahtar kelimesi
try { int.Parse("x"); }
catch { }____ { Console.WriteLine("Temizlik"); }
Cevabı göster
try { int.Parse("x"); }
catch { }finally { Console.WriteLine("Temizlik"); }
-
Bloğu göreviyle eşleştir
- try
- Riskli kod
- catch
- Hatayı yakalar
- finally
- Temizlik
Sıradaki ders: throw