Using vs. Try-Finally
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 class'tır. Bir filename geçirerek oluşturursun ve dosyayı okuma için açar. IDisposable uygular; bu nedenle kullanımdan sonra düzgün bir şekilde kapatılmalıdır. using tam olarak bunu senin için halleder.
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
KolayprocessFile adlı bir metot oluşturun. Bu metot:
- string türünde bir parametre olarak filename alır
- dosyadaki tüm satırları okumak için
usingifadesini veStreamReaderkullanı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
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null SafetyKendi başına pratik yap: Online C# derleyicisi