หากการขว้างปาSystem.Exception
ถือว่าแย่มากทำไมไม่Exception
ทำabstract
ในตอนแรก?
ด้วยวิธีนี้มันเป็นไปไม่ได้ที่จะโทร:
throw new Exception("Error occurred.");
สิ่งนี้จะบังคับใช้การยกเว้นที่ได้รับเพื่อให้รายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาดที่เกิดขึ้น
ตัวอย่างเช่นเมื่อฉันต้องการให้ลำดับชั้นข้อยกเว้นที่กำหนดเองสำหรับห้องสมุดฉันมักจะประกาศคลาสฐานนามธรรมสำหรับข้อยกเว้นของฉัน:
public abstract class CustomExceptionBase : Exception
{
/* some stuff here */
}
แล้วมีข้อยกเว้นบางอย่างที่มีจุดประสงค์เฉพาะเจาะจงมากขึ้น:
public class DerivedCustomException : CustomExceptionBase
{
/* some more specific stuff here */
}
จากนั้นเมื่อเรียกเมธอดไลบรารี่ใด ๆ เราสามารถลอง / แทร็กบล็อคทั่วไปเพื่อดักจับข้อผิดพลาดที่มาจากไลบรารีโดยตรง:
try
{
/* library calls here */
}
catch (CustomExceptionBase ex)
{
/* exception handling */
}
นี่เป็นวิธีปฏิบัติที่ดีหรือไม่?
มันจะดีไหมถ้าException
ถูกทำให้เป็นนามธรรม?
แก้ไข: จุดของฉันที่นี่คือแม้ว่าจะมีคลาสยกเว้นabstract
คุณสามารถจับมันในบล็อก catch-all การทำให้เป็นนามธรรมเป็นเพียงวิธีห้ามมิให้โปรแกรมเมอร์เขียนข้อยกเว้น "กว้างเป็นพิเศษ" โดยปกติเมื่อคุณสมัครใจโยนข้อยกเว้นคุณควรรู้ว่ามันคืออะไรและทำไมมันเกิดขึ้น ดังนั้นบังคับให้โยนประเภทยกเว้นที่เฉพาะเจาะจงมากขึ้น