第12章 异常处理和注意事项

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第12章异常处理和注意事项12.1错误和异常处理12.2C#编程规则12.3小结12.1错误和异常处理错误可以分为以下3类。语法错误:程序代码的编写中,没有按照规定的语法则会产生语法错误。逻辑错误:程序逻辑处理出现的错误。逻辑错误会导致实际处理结果和预测结果不相符。运行时错误:该错误通常表现为内存泄露、以零作除数等,这些异常会在运行时出现,难以确定错误起因。12.1.1异常处理类Exception是异常类的基类。Exception类的常用属性:Message、Data、Source、StackTrace等。异常类中最重要的属性就是Message属性和StackTrace属性。Message属性中包含了出错的原因。StackTrace属性记录了出错的详细方法名称。异常可由系统抛出,也可由客户程序使用throw关键字引发12.1.1异常处理类异常继承体系:ExceptionSystemExceptionApplicationExceptionIOExceptionDataExceptionArthmeticExceptionInvalidCastExceptionXmlExceptionTargetExceptionDivideByZeroExceptionOverflowException12.1.1异常处理类常用系统异常类:OutOfMemoryException:没有足够的内存继续执行程序引发的异常;InvalidCastException:因无效类型转换或显式转换引发的异常;OverflowException进行算术运算、类型转换或转换操作导致溢出的异常;ApplicationException:是第三方定义的异常基类,此异常只能由用户程序引发,而不能由系统引发。12.1.2捕获异常方式错误发现方式:使用调试器测试:通常每种开发语言环境都有调试器,并且都方便实用。单元测试:即针对程序模块进行的测试。集成测试:也称为联合测试或组装测试。确认测试:也称为有效性测试。确认测试通常也使用黑盒测试方式,需要根据用户的需求输入一些数据,以检查软件是否可以正常运行。12.1.2捕获异常方式使用调试器进行调试的方式:断点:是程序执行暂停的地方。3个方法设置断点,在菜单栏中单击【调试】|【新建断点】命令,或者在行的最左边单击,或者按【F9】键。只需再执行一遍和设置断点相同的操作即可取消断点。执行光标:执行光标一般黄色的,用于标识程序当前运行到的行。调试工具栏:是包含调试时的常用命令的工具栏,包括启动调试、全部中断、停止调试、重新启动、显示下一语句、逐语句、逐过程和跳出命令按钮。断点管理窗口自动窗口局部变量窗口监视窗口即时窗口12.1.2捕获异常方式断点管理窗口:该窗口列出了所有断点,其中每一行都代表一个断点,每个断点都由所在文件、条件、命中次数等项来描述。自动窗口:必须在调试运行时才能打开,“自动窗口”自动跟踪运行光标的当前行和下一行的变量,显示变量列表和变量当前值。“自动窗口”的变量是系统自动跟踪的,无需自行添加。而且,当运行光标所在语句行有方法调用时,“自动窗口”将显示该方法以及包含该方法调用的所有方法的返回值。12.1.2捕获异常方式局部变量窗口:局部变量窗口跟踪当前局部范围内所有变量,跟踪的局部范围就是该方法的作用范围,也就是说局部变量窗口可以显示方法内出现的所有变量。监视窗口:可以自定义要跟踪的变量。即时窗口:“即时窗口”可以不在调试时执行。如果在调试中执行,在“即时窗口”里可以计算表达式、执行语句、跟踪变量等。12.1.2捕获异常方式结构化异常处理:对于结构化异常处理,使用trycatch语句结构来捕获和处理错误。如果进行了异常处理,那么CLR将调用异常处理代码;如果未进行异常处理,那么CLR会终止程序的执行并弹出错误提示窗口。其语法形式为:try{正常处理模块}Catch(Exceptione){错误处理模块}12.1.2捕获异常方式示例:staticvoidMain(string[]args){int[]a=newint[5];try{a[10]=1;}catch(Exceptione){Console.WriteLine(数组访问错误,{0},e.Message);}Console.ReadLine();}12.1.3自定义异常处理类自定义异常类语法形式如下。publicclassUserMessageException:ApplicationException{publicUserMessageException(Stringmsg):base(msg){}}对于自定义异常处理类,需要人为引发异常,因此需要使用throw关键字显式引发异常。12.1.3自定义异常处理类throw使用示例:staticvoidMain(string[]args){try{…….if(ia.Length)thrownewIndexOutOfRangeException();a[i]=int.Parse(Console.Readline());}catch(System.IndexOutOfRangeExceptione){//数组越界异常}}12.1.3自定义异常处理类自定义异常类使用示例:classEmailException:Exception{stringerrorname;//出错人姓名stringerrmsg;//错误信息publicEmailException(stringmsg,stringname):base(msg)//构造函数{errorname=name;errordate=DateTime.Now.ToString();errormsg=msg;}publicvoidSendToMail(){Console.WriteLine(errorname+””+errormsg);}}12.1.3自定义异常处理类代码接上节classTest{staticboolCheckEmail(){returnfalse;}staticvoidMain(string[]args){try{if(!CheckEmail())thrownewEmailException(电子邮件地址有误!,杰克);}catch(EmailExceptione){e.SendToMail();}}12.2C#编程规则12.2.1源代码内部注释规则文件头部注释规则1:文件包含文件头,需要说明文件名、作者、创建时间、变更记录等。/****************************文件名:NetPrint.cs*作者:xxx*创建日期:2008年12月3日*描述:完成打印功能*修改日期:2008年12月31日*Email:lianjie@126.com***************************/12.2.1源代码内部注释规则规则2:推荐采用.NET形式书写头部注释。示例:///summary///文件名:NetPrint.cs///作者:xxx///创建日期:2008年12月3日///描述:完成打印功能///修改日期:2008年12月31日///Email:VisualStudio2008rumen@126.com////summary12.2.1源代码内部注释规则类及其成员注释规则1:对方法和类的注释要使用三斜线(///)示例:///summary///功能:对于此类功能的描述///作者:作者中文名///日期:编写日期等////summaryclassBookSystem{///summary///图书详细信息查询////summarypublicDataSetSelectBooks(intid){}}12.2.1源代码内部注释规则规则2:代码行文注释需使用“//”和“/*…*/”,应尽量详细说明。示例:publicDataSetSelectBooks(intid)/*书籍ID*/{DataSetdsBook;//书籍数据集}12.2.2用法约定命名规则骆驼命名法(Camel):即名称像骆驼背一样跌宕起伏。该命名法要求名称的首单词要小写,随后的单词首字母要大写,例如下列代码:voidprintEmployeePaychecks(){…}帕斯卡命名法(Pascal):与骆驼命名法类似,区别在于要求首单词大写,而骆驼命名法要求小写,例如下列代码:voidPrintEmployeePaychecks(){…}命名规则匈牙利命名法(Hungarian):匈牙利命名法是一位名为CharlesSimonyi的匈牙利程序员发明的。基本原则是变量名=类型+对象描述。示例:classcBitmap;stringsCustomers;intnLength;boolbEnable;命名规范命名规范类的命名规范:在类中需使用Pascal规则命名类名。classPerson使用能够反映类功能的名词或名词短语命名类。publicclassFileStream不能使用“_”、“C”、“I”等具备特定含义的前缀。class_ManagerSystem//最好不要这样定义。自定义异常类应以Exception结尾。classTvException命名规范类字段命名规范如下使用Camel命名规则为类成员变量命名,即首单词(或单词缩写)小写。stringstuName;类字段变量名前可加“_”前缀。string_stuName;禁止在普通变量前加“m_”前缀,这是C语言中较老的命名规则。stringm_stuName;命名规范方法的命名规范使用Pascal命名规则为方法命名,即首字母大写。publicvoidDoubleValue(){…}方法名应尽量使用动词或动词短语。voidRemoveAll(){…}类中的访问修饰符或功能相同的方法应该放置在一起,且公共或实现接口的方法在前。命名规范属性的命名规范:使用名词定义属性,使用Pascal命令规则为属性命名,即首字母大写。publicColorBookName属性和相应字段名称要关联。publicclassBook{privatestringbookName;publicColorBookName{get{returnbookName;}}}命名规范参数的命名规范使用Camel命名规则为参数命名,即首字母小写,例如下列代码。stringFormat(stringformat,object[]args){…}使用描述性参数名称,参数名称应当具有说明性。不能给参数加匈牙利类型表示法的前缀。例如下列代码是不合理的。voidInsert(stringsName,stringstrAddress)正确形式如下。voidInsert(stringname,stringaddress)命名规范常量的命名规范使用Pascal命名规则为只读常量命名,即首字母大写使用Pascal命名规则为枚举命名,因为枚举成员本属于常量,命名规则同上使用Pascal命名规则为静态成员或属性命名,即首字母大写命名规范接口的命名规范使用Pascal规则为接口命名,且必须以大写I开头。publicinterfaceIDataPortpublicinterfaceIFormTable接口名称要有意义,中间不能有下划线“_”等字符,例如下列代码。interfaceI_Data_Port;//这是不合适的如果类实现了接口,名称尽量和接口相同,只是省略掉“I”字符。命名规范事件的命名规范使用Pascal命名规则为委托命名,即首字母大写,例如下列代码。publicdelegatevoidCountHandler(intx,inty)定义事件的委托要使用EventHandler后缀,且包含sender和e两个参数,例如下列代码。delegatevoidMouseEv

1 / 32
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功