欢迎来到天天文库
浏览记录
ID:57587609
大小:70.99 KB
页数:15页
时间:2020-08-27
《C#源代码缺陷说明.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C#源代码缺陷说明1.1 资源管理类1.1.1 资源泄漏缺陷描述:实现Idisposable接口的对象使用结束后未调用Dispose方法。缺陷危害:资源泄漏可能导致非托管资源长时间被占用而无法释放,进而可能导致资源耗尽而系统不可用。修复或避错建议:实现Idisposable接口的对象使用结束后调用Dispose方法释放非托管资源或者将实现Idisposable接口的对象放到using语句中。示例1:不规范用法publicvoidExampleFun(stringname){StreamReade
2、rreader=newStreamReader(name);//使用reader对象...}//方法退出前未释放reader对象的资源示例2:规范用法publicvoidExampleFun(stringname){StreamReaderreader=newStreamReader(name);try{//使用reader对象...}catch(Exceptione){...}finally{reader.Close();//Close方法调用了Dispose方法释放reader对象的资源}}
3、示例3:规范用法publicvoidExampleFun(stringname){using(StreamReaderreader=newStreamReader(name)){//使用reader对象...}}1.1 解引用类1.1.1 null解引用缺陷描述:对于值可能为null的引用类型变量,未检查变量是否为null而直接解引用该变量。缺陷危害:null解引用会导致程序抛出NullReferenceException类型的异常。修复或避错建议:在解引用变量前检查变量是否为null并对变量值
4、为null的情况进行处理。示例1:不规范用法publicvoidExampleFun(){strings1=null;strings2=s1.Trim();//null解引用}示例2:规范用法publicvoidExampleFun(){strings1=null;if(s1!=null){strings2=s1.Trim();}}1.2 控制语句类1.2.1 用于控制程序流程的条件表达式为常量缺陷描述:用于控制程序流程的条件表达式的结果恒为真或恒为假。缺陷危害:用于控制程序流程的条件表达式为常
5、量时,代码的部分分支路径永远不会被执行,条件表达式变得毫无意义。当用于控制循环的条件表达式的结果恒为真时,可能导致程序进入死循环。示例:不规范用法publicvoidExampleFun(){strings="";if(s==null)//用于控制程序流程的条件表达式“s==null”恒为假{return;}}1.2.2 “If”语句的“then”分支无语句缺陷描述:“If”语句的“then”分支无语句。缺陷危害:“If”语句的“then”分支无语句通常不是程序的本意。“If”语句的“then”
6、分支无语句通常是遗漏了代码,可能会导致程序出错或程序功能实现不正确。修复或避错建议:补充“then”分支的代码。示例:不规范用法publicvoidExampleFun(booleancond){if(cond){//“If”语句的“then”分支无语句}}1.1.1 “If”语句的“then”分支只有分号缺陷描述:“If”语句的“then”分支只有分号。缺陷危害:“If”语句的“then”分支只有分号通常不是程序的本意。“If”语句的“then”分支只有分号通常是打字错误,可能会导致“If”语
7、句的“then”分支部分的代码在不满足判断条件时也进行执行。修复或避错建议:修复打字错误。示例:不规范用法publicvoidExampleFun(){inta=0;if(a>0);//“If”语句的“then”分支只有分号{a++;}}1.2 运算处理类1.2.1 非法计算缺陷描述:对于某些算术运算的操作数,其取值是受到限制的,如%,/,%=,/=后面的除数都不应该为0。一些数学函数的参数是有定义域的,如果变量的取值范围中包括不合法的数据则会引起异常。如asin,acos,atan2,div,
8、fmod,ldiv,log,log10,sqrt等。缺陷危害:非法计算错误会产生运行时异常处理逻辑,导致未知错误。修复或避错建议:在使用算术运算前应检查操作数或运算参数,判断其是否符合相应的约束,并对不符合的情况进行处理。示例1:不规范用法publicvoidExampleFun(inti){if(i<10){i=20/i;//非法计算}}示例1:规范用法publicvoidExampleFun(inti){if((i<10)&&(i!=0)){i=20/i;}}1.1.1 公共引用类型重载等于
此文档下载收益归作者所有