如果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 / catch块直接捕获来自库的任何错误:
try
{
/* library calls here */
}
catch (CustomExceptionBase ex)
{
/* exception handling */
}
这是一个好习惯吗?
如果Exception
被抽象化会好吗?
编辑:我的意思是,即使标记了异常类abstract
,您仍然可以在全部捕获块中捕获它。将其抽象化只是禁止程序员抛出“超宽”异常的一种方法。通常,当您自愿引发异常时,您应该知道异常的类型以及发生原因。因此,强制抛出一个更具体的异常类型。