Özel Durumlar ve Özel Durum İşleme
C# dilinin özel durum işleme özellikleri, bir program çalışırken oluşan beklenmeyen veya olağanüstü durumlarla ilgilenmenize yardımcı olur. Özel durum işleme, başarılı olabilen eylemleri denemek, bunu makul bir karara vardığınızda hataları işlemek ve daha sonra kaynakları temizlemek için , catch
finally
ve anahtar sözcüklerini kullanırtry
. Özel durumlar ortak dil çalışma zamanı (CLR), .NET veya üçüncü taraf kitaplıkları veya uygulama kodu tarafından oluşturulabilir. Özel durumlar anahtar sözcüğü kullanılarak throw
oluşturulur.
Çoğu durumda, özel durum kodunuzun doğrudan çağırdığı bir yöntem tarafından değil, çağrı yığınında daha aşağıda bulunan başka bir yöntem tarafından oluşturulabilir. Özel durum oluşturulduğunda CLR, belirli bir özel durum türü için blok içeren bir catch
yöntem arayarak yığını geri alır ve bulduğu ilk bu tür catch
bloğu yürütür. Çağrı yığınının herhangi bir yerinde uygun catch
bir blok bulmazsa, işlemi sonlandırır ve kullanıcıya bir ileti görüntüler.
Bu örnekte, bir yöntem sıfıra bölmeyi sınar ve hatayı yakalar. Özel durum işlemesi olmadan bu program DivideByZeroException işlenmemiş hatasıyla sonlandırılır .
public class ExceptionTest
{
static double SafeDivision(double x, double y)
{
if (y == 0)
throw new DivideByZeroException();
return x / y;
}
public static void Main()
{
// Input for test purposes. Change the values to see
// exception handling behavior.
double a = 98, b = 0;
double result;
try
{
result = SafeDivision(a, b);
Console.WriteLine("{0} divided by {1} = {2}", a, b, result);
}
catch (DivideByZeroException)
{
Console.WriteLine("Attempted divide by zero.");
}
}
}
Özel Durumlara Genel Bakış
Özel durumlar aşağıdaki özelliklere sahiptir:
- Özel durumlar, sonuçta türünden türetilen türlerdir
System.Exception
. - Deyimlerin çevresinde özel durumlar oluşturabilecek bir
try
blok kullanın. - Blokta bir özel durum oluştuğunda
try
, denetim akışı çağrı yığınında herhangi bir yerde bulunan ilk ilişkili özel durum işleyicisine atlar. C# dilindecatch
anahtar sözcüğü bir özel durum işleyici tanımlamak için kullanılır. - Belirli bir özel durum için özel durum işleyicisi yoksa, program bir hata iletisiyle yürütmeyi durdurur.
- İşleyip uygulamayı bilinen bir durumda bırakmadığınız sürece bir özel durum yakalamayın. yakalarsanız
System.Exception
, bloğun sonundaki anahtar sözcüğünüthrow
kullanarak yeniden yükleyincatch
. - Bir
catch
blok bir özel durum değişkeni tanımlıyorsa, oluşan özel durum türü hakkında daha fazla bilgi edinmek için bunu kullanabilirsiniz. - Özel durumlar, anahtar sözcüğü kullanılarak
throw
bir program tarafından açıkça oluşturulabilir. - Özel durum nesneleri, çağrı yığınının durumu ve hatanın metin açıklaması gibi hata hakkında ayrıntılı bilgiler içerir.
- Bir
finally
bloktaki kod, bir özel durum oluşturulsa bile yürütülür. Kaynakları serbest bırakmak için birfinally
blok kullanın; örneğin bloktatry
açılmış olan akışları veya dosyaları kapatın. - .NET'teki yönetilen özel durumlar Win32 yapılandırılmış özel durum işleme mekanizmasının üzerine uygulanır. Daha fazla bilgi için Bkz. Yapılandırılmış Özel Durum İşleme (C/C++) ve Win32 Yapılandırılmış Özel Durum İşlemenin Derinlikleri ile ilgili Kilitlenme Kursu.
C# Dil Belirtimi
Daha fazla bilgi için bkz. C# Dil BelirtimindekiÖzel Durumlar. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.