C#(面向对象的托管语言)类库(区别于应用程序)的异常处理思路
1、不要做出任何应用程序才需要考虑抉择策略,不能想当然的决定一些错误情形。具体的一个体现形式是什么异常都捕获。这不是类库的职责,因为无法掌握所有的调用者的使用情形,这些不确定性是委托、虚方法、接口等特性带来的。
一个直观的例子是调用者可能故意在委托中抛出异常以便在后面的逻辑中捕获它。
同时编写类库与应用程序的开发者往往会混淆二者的边界。
2、务必使用finally保证清理代码的执行。(或者相关语法糖using、lock等)
3、从异常状态中恢复。
类库方法也会调用其它类库方法,如果知道方法会抛出什么异常并且能够恢复的话,就去处理它。
4、如果修改状态,就要做好出错的准备,在发生无法恢复的异常时回滚部分完成的操作。
5、有时可以考虑隐藏实现细节来维系协定,专注于当前类库的业务。(慎用,调试变困难了)
比如一个转换工具类,捕获文件不存在的异常,抛出自定义的转换失败异常。
6、在方法无法完成其功能时选择抛出异常是最佳的对象模型。在调用者指出频繁抛出异常导致性能问题时才考虑提供Tryxxx方法。
Tryxxx方法不代表捕获所有异常,它返回false只代表那一种高频的错误,其它错误仍然抛出异常。
一个典型的例子就是官方库中的int.TryParse。返回false只代表字符串无法解析为int。当遇到内存不足或实参无效时,它仍然会抛出异常。
7、有必要强调,Tryxxx方法是为了规避频繁触发一种或一类异常而设计的。它并不是为了捕获所有异常而设计。
一个典型的例子就是官方库中的int.TryParse。返回false只代表字符串无法解析为int。当遇到内存不足或实参无效时,它仍然会抛出异常。
8、不要使用错误码(包括true/false表示的特殊错误码)代替异常处理。
因为clr与类库选择抛出异常,而你的方法采用错误码。现在所有人都需要处理两种机制。
C#(面向对象的托管语言)类库(区别于应用程序)的异常处理思路的更多相关文章
- 托管DLL和非托管DLL的区别
首先解释一下,托管DLL和非托管DLL的区别.狭义解释讲,托管DLL就在Dotnet环境生成的DLL文件.非托管DLL不是在Dotnet环 境生成的DLL文件. 托管DLL文件,可以在Dotnet环境 ...
- JAVA和C语言的区别
java语言和c语言的区别: 1 un 公司推出的Java 是面向对象程序设计语言,其适用于Internet 应用的开发,称为 ...
- 面向对象和结构化程序设计的区别X
面向对象和结构化程序设计的区别 结构化程序的概念首先是从以往编程过程中无限制地使用转移语句而提出的.转移语句可以使程序的控制流程强制性的转向程序的任一处,在传统流程图中,就是用上节我们提到的" ...
- c++学习书籍推荐《面向对象程序设计:C++语言描述(原书第2版)》下载
百度云及其他网盘下载地址:点我 <面向对象程序设计:C++语言描述(原书第2版)>内容丰富,结构合理,写作风格严谨,深刻地论述了c++语言的面向对象编程的各种技术,主要内容包括:面向对象编 ...
- 不可或缺 Windows Native (11) - C++: hello c++, C++ 与 C语言的区别小介
[源码下载] 不可或缺 Windows Native (11) - C++: hello c++, C++ 与 C语言的区别小介 作者:webabcd 介绍不可或缺 Windows Native 之 ...
- AJPFX总结面向对象(this和super的区别和应用)
面向对象(this和super的区别和应用)(掌握)* A:this和super都代表什么 * this:代表当前对象的引用,谁来调用我,我就代表谁 * super:代表当 ...
- 关于"动态语言" "静态语言" "静态类型语言" "动态类型语言"的区别
参考链接:关于“编译型”“解释型”“动态语言”“静态语言”“动态类型语言”“静态类型语言”的区分以及优缺点(汇总整理) 很多人把这两类混为一谈,但是这是完全不同的两个概念!!! 动态和静态语言主要看的 ...
- 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)
阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...
- C语言编写的bmp读写程序
C语言编写的bmp读写程序 建议先把bmp的数据存储格式了解下 <span style="font-size:16px;">#include "Windows ...
- C语言之一天一个小程序
程序示例: #include <stdio.h> #include <stdlib.h> int main() { printf("Hello,world!\n&qu ...
随机推荐
- 03C++顺序结构(2)
一.变量.赋值语句与表达式 1.天安门广场在北京市中心,它南北长880米,东西宽500米,试编一程序,计算天安门广场面积是多少平方米. 点击查看代码 1 //试编程,计算天安门广场的面积是多少平方米 ...
- Write failed: Broken pipe > Couldn‘t read packet: Connection reset by peer SFTP服务器连接出现的问题
如果你链接服务器的时候出现下面的提示: Write failed: Broken pipeCouldn't read packet: Connection reset by peer这个问题的原因是C ...
- linux shell移植,sh不支持数组及bash移植
查看此时系统shell ls -al /bin/sh Linux 操作系统缺省的 shell 是Bourne Again shell,它是 Bourne shell 的扩展,简称 Bash,与 Bou ...
- 【转载】 利用p6spy拦截并查看数据库执行操作
https://blog.csdn.net/fanxiaobin577328725/article/details/71601760 一.简介 项目首 页:http://p6spy.github.io ...
- 龙哥收集的Github资源——Python量化不要自己造轮子
打开github后,在搜索框中输入下面的项目作者及项目名称,然后点一下 All Github 搜索 格式 user:xxxxx in:name xxxxxxxxxxxxx 举例 user:Cken ...
- FFmpeg中的色彩空间与像素格式3-像素格式
FFmpeg 中的色彩与像素系列文章如下: [1]. FFmpeg中的色彩空间与像素格式1-色彩空间基础 [2]. FFmpeg中的色彩空间与像素格式2-RGB/YUV色彩空间 [3]. FFmpeg ...
- 小洋的Python入门笔记😀
小洋的python入门笔记 起因:发现自己前三年做的Python项目很多都是现做先学的,修改理解语法错误多依仗对C/C++的理解,对python缺乏一个系统的学习.趁此有空,补上! 特别鸣谢:B站找到 ...
- 基于极坐标参数方程的直线Hough变换
- [转]WorldWind开发中WorldWindowGLCanvas .setPreferredSize()函数找不到
值高温假期,无意翻到了csdn中三维GIS开发的专栏,讲的是worldwind Java三维GIS系统开发的东西,十分感兴趣.恰巧要求的环境已经存在,直接耍起来.将最新的Worldwind和JOGL下 ...
- Python 进阶:深入理解 import 机制与 importlib 的妙用
大家好,今天我们来深入探讨 Python 中的导入机制和 importlib 模块.相信不少朋友和我一样,平时写代码时可能只用过最基础的 import 语句,或者偶尔用 importlib.impor ...