您好, 访客   登录/注册

C#和.NET中的异常处理机制浅析

来源:用户上传      作者:

  摘要:异常处理机制是计算机硬件或者是编程语言的的一种方法,是为了处理错误信息而提供的一种功能,可以让用户更好的理解计算机硬件或者软件中出现的错误代码,增强了代码的可读性,更便于程序员维护以及用户去阅读和理解。该文就C#中的异常处理机制进行了介绍,并对C#中捕获异常的方法和自定义异常进行了分析,使C#程序员更快的理解异常处理方法,使程序的设计更高效、更健壮、更易于维护。
  关键词:C#;异常处理;异常类
  中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)15-0202-02
  Abstract: The exception handling mechanism is a kind of method for computer hardware or programming language, a kind of function provided to deal with the wrong information, which can make the user better understand the error code appeared in the computer hardware or software, enhancing the readability of the code is easier for the programmer maintenance and user reading and understanding. The paper introduced the exception handling mechanism in C#, analyzed the method to catch the exception and custom exception in C#, in order to make C# programmer quicker understand the exception handling method, and make the program design more efficient and robust, and it is easier for maintenance.
  Key words: C#; exception handling; exception class
  程序在运行过程中发生了错误,就称之为“异常”(Exception),它会带来一些不可预知的问题。也许是程序崩溃或者是数据异常出错,也可能是数据库中的数据被错误的修改,严重的可能会导致数据丢失、系统死机、系统程序损坏等。一般常见的程序设计语言都已经提前设计好了异常处理模块以便避免上述情况的发生。在程序中常用的异常一般有打开一个不存在的文件、访问断开连接的网络、对象引用为空、数组下标越界、算法溢出(超出数值表达范围)、除数为零等等。当发生异常时,程序要能够处理异常,使其继续正常运行。C#的异常处理机制简单、高效,通过结构化和易控制的方式就能很容易的处理程序执行时所发生的错误,找出发生的原因,寻求解决方法。
  1 C#和.NET中的异常处理
  C#是微软公司开发的一种面向对象的、安全的、稳定的、并且代码简洁的高级程序设计语言,它运行于.NET Framework之上,通过使用.NET中的大量类库来进行编程。在上述提到的各种情况发生的异常,在.NET中都是属于对象,它们共有一个异常的基类,这个基类就是System.Exception。当发生错误时,系统或当前正在执行的应用程序通过引发包含关于该错误的信息的异常来报告错误。异常发生后,将由该应用程序或默认异常处理程序进行处理。在C#中通过关键字throw在发生错误的时候抛出相应的异常。在外部程序调用方法中,主要是通过try...catch...finally这样的结构来获取和处理相应的异常。在这个结构中,finally语段是可选的。那些可能会抛出需要处理的异常的程序代码会放在try语段中,被称之为试图捕获异常。而那些对于异常情况出现后进行处理的代码被放到了之后的catch语段中,它们被称之为捕获异常。在catch中,如果不带参数,将会捕获所有的异常,如果带参数,则可以捕获不同的异常来进行特定的处理。对于程序中可能会出现的不同情况的异常,try语段可以使用多个catch加异常名来进行特定的处理。在这个结构中的finally语段通常放置程序必须要执行的代码,它不会受到程序中的异常处理的影响。在程序的正常执行过程中,如果有异常发生了,try语段内导致异常的程序代码以及之后的代码都不能被执行,程序将会执行有效的catch语段或者是finally语段内的代码。下面我们具体来看这个异常处理结构。
  2 通过使用try...catch...finally结构来处理异常情况
  首先,程序使用FileStream类定义了一个文件流fs并赋了一个空值,然后使用异常处理结构来处理程序,首先在try语句段中指向C:\temp\filedata.txt文件,并使用FileMode.Open参数打开这个文件,如果文件不存在,将会引发异常。然后将文件以字节流的形式读一行数据赋给变量line,最后在控制台输出这个变量。在catch语段中,使用FileNotFoundException(路径不对或未找到文件)参数来捕获异常,然后在控制台输出“[没有找到所需的文件] C:\temp\filedata.txt”。对于finally语段来说是可选的,因为无论是否产生异常,它都会被执行,在通常情况下,由于在try语段中的代码执行过程中,存在由于发生了异常情况因而导致程序申请的系统资源无法得到释放的可能,所以就可以使用finally语段来释放申请的资源。在这段程序代码中,如果文件流不为空,最后将关闭当前文件流并释放与之关联的所有资源,最后在控制台输出"资源释放完毕!"。
  3 用户自定义异常
  在C#程序中,可以允许自定义异常类型,用来表示用户代码在执行过程中不希望发生的事件,并能为用户提供更好的理解。由于C#中的异常是以类和对象方式来实现的,所以我们的自定义的异常类就需要继承C#中异常的基类。在创建自己的异常类时,通常的做法是以“Exception”这个词作为用户定义的异常类名来结尾。
  好了,现在我们来看一个用户自定义的异常类的基本结构事例:
  上面就是一个简单的用户自定义的异常类,它首先继承自基类Exception,其中有一个私有变量message用于显示捕获到错误后的提示信息,这个例子中使用了两个构造函数,其中无参的构造函数用于直接显示错误信息,然后还有一个构造函数的重载。可以在程序设计中对于已知的错误直接捕获后给出msg参数,即一个直观明了的提示信息。最后对ToString方法进行重载,返回错误信息。
  以上我们主要探讨了一些异常的基本概念,并分析了C#中的异常结构的构成以及工作原理,最后介绍了用户自定义异常类的实现方法,通过这些方法,可以使用程序更好的做出合理的程序,避免一些程序中不可预知的或已知错误的发生。
  参考文献:
  [1] 张聪品, 赵琛, 糜宏斌. 异常处理机制研究[J]. 计算机应用研究, 2005(4).
  [2] 闫大顺, 姜淑娟, 席景科. 一种异常处理机制的设计与实现[J]. 计算机工程与设计, 2006(24).
  [3] 王方良, 汤文成. 基于C++异常处理机制的研究[J]. 计算机技术与发展, 2007(1).
转载注明来源:https://www.xzbu.com/8/view-11723883.htm