Exception
tüm istisnalar için temel türdür ve bu nedenle son derece belirsizdir. Bu istisnayı asla atmamalısınız çünkü herhangi bir yararlı bilgi içermiyor. İstisnalar için kod yakalama çağrısı, kasıtlı olarak atılan istisnayı (mantığınızdan) tamamen istenmeyen ve gerçek hataları gösteren diğer sistem istisnalarından ayıramaz.
Aynı sebep için de geçerlidir SystemException
. Türetilmiş türlerin listesine bakarsanız, çok farklı anlamlara sahip çok sayıda başka istisna görebilirsiniz.
NullReferenceException
ve IndexOutOfRangeException
farklı türdendir. Şimdi bunlar çok özel istisnalar, bu yüzden onları atmak iyi olabilir . Ancak, genellikle mantığınızda bazı gerçek hatalar olduğu anlamına geldiklerinden, bunları atmak istemezsiniz. Örneğin, boş referans istisnası, olan bir nesnenin bir üyesine erişmeye çalıştığınız anlamına gelir null
. Kodunuzda bu bir olasılık varsa, null
bunun yerine her zaman açıkça kontrol etmeli ve daha yararlı bir istisna atmalısınız (örneğin ArgumentNullException
). Benzer şekilde, IndexOutOfRangeException
geçersiz bir dizine eriştiğinizde (dizilerde - listelerde değil) ortaya çıkar. Her zaman ilk etapta bunu yapmadığınızdan emin olmalısınız ve örneğin önce bir dizinin sınırlarını kontrol etmelisiniz.
Bu ikisi gibi birkaç başka istisna InvalidCastException
da vardır DivideByZeroException
, örneğin kodunuzdaki belirli hatalar için atılan ve genellikle yanlış bir şey yaptığınız veya önce bazı geçersiz değerleri kontrol etmediğiniz anlamına gelir. Bunları bilerek kodunuzdan atarak, yalnızca koddaki bir hata nedeniyle mi yoksa yalnızca uygulamanızdaki bir şey için yeniden kullanmaya karar verdiğiniz için mi çağrı kodunun atıldığını belirlemesini zorlaştırırsınız.
Elbette bu kuralların bazı istisnaları (hah) vardır. Mevcut olanla tam olarak eşleşen bir istisnaya neden olabilecek bir şey oluşturuyorsanız, özellikle bazı yerleşik davranışları eşleştirmeye çalışıyorsanız, bunu kullanmaktan çekinmeyin. O zaman çok özel bir istisna türü seçtiğinizden emin olun.
Genel olarak, ihtiyacınızı karşılayan (belirli) bir istisna bulamazsanız, belirli beklenen istisnalar için her zaman kendi istisna türlerinizi oluşturmayı düşünmelisiniz. Özellikle kütüphane kodu yazarken, istisna kaynaklarını ayırmak için bu çok yararlı olabilir.