Jika melempar System.Exception
dianggap sangat buruk, mengapa tidak Exception
dilakukan abstract
sejak awal?
Dengan begitu, tidak mungkin menelepon:
throw new Exception("Error occurred.");
Ini akan menegakkan menggunakan pengecualian turunan untuk memberikan rincian lebih lanjut tentang kesalahan yang terjadi.
Misalnya, ketika saya ingin memberikan hierarki pengecualian kustom untuk perpustakaan, saya biasanya mendeklarasikan kelas dasar abstrak untuk pengecualian saya:
public abstract class CustomExceptionBase : Exception
{
/* some stuff here */
}
Dan kemudian beberapa pengecualian yang diturunkan dengan tujuan yang lebih spesifik:
public class DerivedCustomException : CustomExceptionBase
{
/* some more specific stuff here */
}
Kemudian ketika memanggil metode pustaka apa pun, seseorang dapat meminta blok coba / tangkap generik ini untuk secara langsung menangkap kesalahan yang datang dari pustaka:
try
{
/* library calls here */
}
catch (CustomExceptionBase ex)
{
/* exception handling */
}
Apakah ini praktik yang baik?
Apakah lebih baik jika Exception
dibuat abstrak?
EDIT: Maksud saya di sini adalah bahwa bahkan jika kelas pengecualian ditandai abstract
, Anda masih bisa menangkapnya di blok tangkap semua. Menjadikannya abstrak hanyalah cara untuk melarang pemrogram untuk melemparkan pengecualian "super-lebar". Biasanya, ketika Anda secara sukarela melempar pengecualian, Anda harus tahu apa itu dan mengapa itu terjadi. Dengan demikian menegakkan untuk melemparkan jenis pengecualian yang lebih spesifik.