Özel istisnalar ve hata tasarımı
Küçük özel istisnalar oluşturun, doğru yerleşik türleri (ArgumentException, InvalidOperationException) seçin ve InnerException ile bağlam ekleyin.
Özel istisnalar ve hata tasarımı, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 3 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 3 dersten oluşur.
Amaç ve hedefler
Amaç: Hataları açık ve yakalanabilir hâle getirmek.
- Belirli bir hata için belirli bir tür kullanın.
- Bağlam için iyi bir ileti ve InnerException sağlayın.
- Uygun olduklarında yerleşik türleri tercih edin.
Özel durum türü oluşturma
Exception sınıfından türeyin, adını Exception ile bitirin ve standart oluşturucuları ekleyin. Küçük ve yararlı veriler taşıyın.
using System;
// Custom, specific to our domain
public sealed class ConfigNotFoundException : Exception
{
public string Key { get; private set; }
public ConfigNotFoundException(string key)
: base("Config key not found: " + key)
{
Key = key;
}
public ConfigNotFoundException(string key, Exception inner)
: base("Config key not found: " + key, inner)
{
Key = key;
}
}
public class Program
{
public static void Main(string[] args)
{
try
{
throw new ConfigNotFoundException("ApiUrl");
}
catch (ConfigNotFoundException ex)
{
Console.WriteLine(ex.Message);
}
}
}
Bağlam için InnerException
Kök nedeni korumak için alt düzey özel durumları bir alan özel durumuyla sarın ve InnerException özelliğini ayarlayın.
using System;
using System.IO;
public sealed class ConfigNotFoundException : Exception
{
public string Key { get; private set; }
public ConfigNotFoundException(string key, Exception inner)
: base("Config key not found: " + key, inner) { Key = key; }
}
public static class Config
{
public static string Load(string path, string key)
{
try
{
string[] lines = File.ReadAllLines(path); // may throw
for (int i = 0; i < lines.Length; i++)
{
int idx = lines[i].IndexOf("=");
if (idx > 0 && lines[i].Substring(0, idx) == key)
return lines[i].Substring(idx + 1);
}
throw new ConfigNotFoundException(key, null);
}
catch (IOException io)
{
// Wrap low-level error with domain meaning
throw new ConfigNotFoundException(key, io);
}
}
}
public class Program
{
public static void Main(string[] args)
{
try
{
Console.WriteLine(Config.Load("missing.cfg", "ApiUrl"));
}
catch (ConfigNotFoundException ex)
{
Console.WriteLine("Top: " + ex.Message);
if (ex.InnerException != null)
Console.WriteLine("Inner: " + ex.InnerException.GetType().Name);
}
}
}
Önce yerleşik türleri seçin
Yaygın sorunlar için yerleşik türleri kullanın: ArgumentNullException, ArgumentOutOfRangeException, FormatException, InvalidOperationException vb.
using System;
public static class MathUtil
{
public static int Divide(int a, int b)
{
if (b == 0) throw new DivideByZeroException();
return a / b;
}
public static int ParsePositive(string text)
{
if (text == null) throw new ArgumentNullException("text");
int value = int.Parse(text); // may throw FormatException
if (value <= 0) throw new ArgumentOutOfRangeException("text", "must be > 0");
return value;
}
}
public class Program
{
public static void Main(string[] args)
{
try { Console.WriteLine(MathUtil.ParsePositive("-1")); }
catch (ArgumentOutOfRangeException ex) { Console.WriteLine("Range: " + ex.ParamName); }
}
}
Özel durumlar ve korumalar
Özel durumları olağandışı durumlar için kullanın. Beklenen başarısızlıklarda TryX korumalarını veya dönüş kodlarını tercih edin.
using System;
public static class Parser
{
// BAD: using exceptions for expected cases
public static int ParseOrThrow(string s)
{
return int.Parse(s); // will throw often for user input
}
// GOOD: guard-check pattern for expected failure
public static bool TryParsePositive(string s, out int value)
{
value = 0;
int tmp;
if (!int.TryParse(s, out tmp)) return false;
if (tmp <= 0) return false;
value = tmp;
return true;
}
}
public class Program
{
public static void Main(string[] args)
{
int v;
if (Parser.TryParsePositive("12", out v))
Console.WriteLine("OK " + v);
else
Console.WriteLine("Invalid");
}
}
Hata tasarımı kontrol listesi
Kontrol listesi:
- Mümkün olduğunda bir yerleşik tür seçin.
- Aksi durumda standart oluşturuculara sahip küçük bir CustomException oluşturun.
- Kök nedeni korumak için InnerException ekleyin.
- Beklenmeyen durumlarda özel durumları, beklenen başarısızlıklarda ise TryX kullanın.
Özel durum tasarımı
Tekrar
Tekrar: Yerleşik özel durumları tercih edin; aksi durumda standart oluşturuculara sahip küçük bir özel tür tanımlayın ve nedeni kaybetmeden bağlam eklemek için InnerException kullanın.
Sıkça Sorulan Sorular
“Özel istisnalar ve hata tasarımı” dersi ücretsiz mi?
Evet — “Özel istisnalar ve hata tasarımı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 3 dersten oluşur.
“Özel istisnalar ve hata tasarımı” dersinde ne öğreneceğim?
Küçük özel istisnalar oluşturun, doğru yerleşik türleri (ArgumentException, InvalidOperationException) seçin ve InnerException ile bağlam ekleyin. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 2. dersidir.
“Özel istisnalar ve hata tasarımı” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- try/catch/finally, throw new ve yeniden fırlatma
- Özel istisnalar ve hata tasarımı
- IDisposable ve using deyimi