C#类库处理异常指导原则

作为一个类库开发的新手,在面对Exception时,一直不知道所措。阅读了<CLR via C#>的异常处理部分,记录下一些基本的原则,供日后查询并与大家分享。欢迎高手指点一二。


一、善用finally块
    应当将一些打开的资源在finally块中进行清理;
    C#的一些语言提供了相应的实现,编译器通过为这些语言添加try/finally块实现。如:
    -- lock: 锁会在finally块释放;
    -- using: 会调用对象的Dispose方法;
    -- foreach: 会在finally块调用IEnumerator对象的dispose方法;
    -- 定义析构器:会在finally块中调用基类的Finalize方法;

二、不要什么都捕捉
    如果catch一个异常,表明你预见到该异常,理解它为什么发生,并知道如何处理它。
    如果catch Exception,并做一些操作,最好是在末尾重新抛出异常,不能将System.Exception异常悄悄地“吞噬”,应当抛出让应用程序处理;

三、得体地从异常中恢复
    如果已经预料到会抛出某些异常,应该Catch这些异常并做相应的恢复工作,使程序得以继续执行;

四、发生不可恢复的异常时回滚部分完成的操作——维持状态

五、抛出新的异常时要注意:
    --隐藏真正的异常;
    --新的异常抛出的位置与原异常发生的位置不同,不利于调试;

六、TypeInitializationException
    如果一个类型构造器(静态构造器)抛出一个异常,而且该异常未在类型构造器方法中捕捉,则CLR就会在内部捕捉该异常,改为抛出TypeInitializationException。这样就可以清楚地知道是哪里出错了。

七、关于未处理异常
    类库开发人员不用考虑,只有应用程序开发人员需要关心未处理的异常。
    对于服务器应用程序,未处理异常不应当客户端。服务器尽量减少暴露关于自己的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值