Using ve Try-Finally Karşılaştırması
Coddy'nin C# Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 28 / 66.
Hem using ifadeleri hem de try-finally blokları, uygun şekilde serbest bırakılması gereken kaynakların yönetilmesine yardımcı olur. using ifadesi, IDisposable nesnelerinin uygun şekilde temizlenmesini sağlamanın daha temiz ve kısa bir yolunu sunar.
Not: using, kaynakların serbest bırakılması için kullanılan try-finally deseninin yerini alır. try-catch yapısının yerini almaz. İstisnaları işlemek için bir using bloğunu yine de try-catch içine yerleştirebilirsin.
Öncelikle try-finally yaklaşımına bakalım:
StreamReader reader = null;
try
{
reader = new StreamReader("file.txt");
string content = reader.ReadToEnd();
Console.WriteLine(content);
}
finally
{
if (reader != null)
{
reader.Dispose();
}
}
using ifadesi bu kodu basitleştirir:
using (StreamReader reader = new StreamReader("file.txt"))
{
string content = reader.ReadToEnd();
Console.WriteLine(content);
}
using ifadesi, bir özel durum oluşsa bile bloktan çıkıldığında Dispose() yöntemini otomatik olarak çağırır.
StreamReader nedir?StreamReader, dosyalardan metin okumak için kullanılan bir sınıftır. Bir dosya adı geçirerek bir tane oluşturursunuz ve dosyayı okumak üzere açar. IDisposable arayüzünü uygular; bu nedenle kullanımdan sonra düzgün şekilde kapatılması gerekir ve using tam olarak bunu sizin için yapar.
Yaygın StreamReader yöntemleri:
ReadToEnd(): dosyanın tamamını tek bir dize olarak okurReadLine(): her seferinde bir satır okur, dosyanın sonuna ulaşıldığındanulldöndürür
Bir dosyadaki satırları saymak için ReadLine() döngüsünü kullanabilirsiniz:
using (StreamReader reader = new StreamReader("file.txt"))
{
int lineCount = 0;
while (reader.ReadLine() != null)
{
lineCount++;
}
Console.WriteLine(lineCount);
}
Eksik bir dosya gibi özel durumları işlemek için using ifadesini try-catch ile de birleştirebilirsiniz:
try
{
using (StreamReader reader = new StreamReader("file.txt"))
{
int lineCount = 0;
while (reader.ReadLine() != null)
{
lineCount++;
}
Console.WriteLine(lineCount);
}
}
catch (FileNotFoundException)
{
Console.WriteLine("File not found");
}
Görev
KolayŞunları yapan processFile adlı bir yöntem oluştur:
- Bir dize parametresi olarak dosya adını alır
- Dosyadaki tüm satırları okumak için
usingileStreamReaderifadesini kullanır - Dosyadaki satır sayısını döndürür
- Bir
FileNotFoundExceptionoluşursa "File not found" yazdırır ve -1 döndürür
Kendin dene
using System;
using System.IO;
class ProcessFile
{
public static int processFile(string filename)
{
// Kodunuzu buraya yazın
}
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1Çok Boyutlu Diziler
2B Dizilere Giriş2B Tanımlama ve Başlatma2B Dizi Öğelerine Erişim2B Dizilerle İç İçe DöngülerDüzensiz DizilerYaygın Matris İşlemleriTekrar - Çok Boyutlu4Akış Denetimi Teknikleri
Erken DönüşlerKoruma KoşullarıAtlama İfadeleri (goto)Break ve Continueİç İçe Koşulları Düzleştirme7İleri Düzey Mantıksal Operatörler
Kısa Devre DeğerlendirmesiKoşullu Mantıksal OperatörlerOperatör ÖnceliğiÖzet - İleri Düzey Operatörler2İleri Düzey Karar Verme
Birden Çok KoşulKarmaşık Boolean MantığıIf ve Switch Karşılaştırmasıİç İçe Switch İfadeleriÖzet - İleri Düzey Kararlar5İstisna Yönetimi
Try-Catch Temelleriİstisna TürleriBirden Çok Catch BloğuDosyalarla ÇalışmaFinally BloğuUsing ve Try-Finally KarşılaştırmasıÖzel İstisnalarTekrar - Hata Yönetimi3Döngü İyileştirmeleri
Döngü PerformansıKarmaşık Yapılar Üzerinde İterasyonHer Döngü TürüDöngüleri Yeniden DüzenlemeÖzet - Optimize Edilmiş Döngüler6Null Yönetimi
Null Referanslarının TemelleriNullable Değer TürleriNull Kontrolü DesenleriSavunmacı ProgramlamaTekrar - Null GüvenliğiKendi başına pratik yap: Online C# derleyicisi