目录
45.方法约定被违背时抛异常
用异常来表示当前状况比错误码要好,错误码容易被忽视。
比如File.Exists() 文件存在返回true,文件不存在返回false 不会抛异常
而File.Open()如果文件不存在或者没有权限读取可以抛异常,因为Open只有在满足上述条件才有意义。侧面也说明了方法起名的规范重要性。
.NET也有很多做的好的示例,比如类型转换有int.parse和int.Tryparse两种,一般容易有异常的都有Try开头的版本。
46.利用using与try/finally来清理资源
如果用到了非托管资源,要通过IDisposable接口明确释放。.NET一般释放的责任是由使用方负责。也就是说自己使用了非托管资源,自己要记得释放。
Try/finally是保证程序出异常了,依然能释放非托管资源。
而using是try/finally的语法糖,帮我们减少代码量。
using只支持实现了IDisposable接口的,不是随随便便都能using的
大量的用到非托管资源其实非常的坑,没办法像C++那样及时的释放。因为释放接口由CLR负责调用
47.专门针对应用程序创建异常
创建自己的异常类是为了能用不同的catch捕获不同的状况。从而用不同的方式去处理。如果处理手段单一,其实没必要实现自己的异常类。
而需要清晰的异常信息来保证更快的修复程序效率,可以试着创建自己的异常类。