Menu
Coddy logo textTech

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 okur
  • ReadLine(): her seferinde bir satır okur, dosyanın sonuna ulaşıldığında null dö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");
}
challenge icon

Görev

Kolay

Şunları yapan processFile adlı bir yöntem oluştur:

  1. Bir dize parametresi olarak dosya adını alır
  2. Dosyadaki tüm satırları okumak için using ile StreamReader ifadesini kullanır
  3. Dosyadaki satır sayısını döndürür
  4. Bir FileNotFoundException oluş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
    }
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online C# derleyicisi