深层次详解Exception

所有的异常类都继承自System.Exception类,当异常产生时,CLR将创建该异常类的实例对象,将从最底层依次寻找合适的异常类型,同时若存在catch语句时将会选择最合适的语句进行处理。

catch语句包括三种形式:

 若使用第三种类型,可以得到异常实例 InstanceID的相关属性,如Message、Source等。

多catch的处理原则

一个异常发生时,会跳转到与异常异常最匹配的catch块执行,继承链决定了匹配度。

public static void HandleExecptionMethod()
        {
            try
            {
                throw new ApplicationException("ApplicationException Occur!");
            }
            catch (NullReferenceException)//尝试取消引用空对象时引发
            {
                Console.WriteLine("Handle1");
            }
            catch (ArgumentException)//当向方法提供的参数之一无效时引发
            {
                Console.WriteLine("Handle2");
            }
            catch (ApplicationException)//当程序发生非致命性应用程序错误时引发的异常
            {
                Console.WriteLine("Handle3");
            }
            catch (SystemException)
            {
                Console.WriteLine("Handle4");//与system命令空间中预定义异常定义基类
            }
            catch (Exception)//应用程序执行过程中发生错误
            {
                Console.WriteLine("Handle5");
            }
            Console.ReadKey();
        }

在上例中共有5个catch块,注意catch块必须按照从最具体到最常规的顺序排列,否则可能造成编译错误。例若将Handle5的向上移到Handle4前面,则发生编译错误。

 public static void ThrowDemoMethod()
        {
            FileStream fs = null;
            try
            {
                fs = new FileStream("c:\\dd.txt",FileMode.Open);
                StreamReader strder = new StreamReader(fs,System.Text.Encoding.Default,false);
                string st = strder.ReadLine();
                Console.WriteLine(st);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.GetType());//获取异常类型
                //throw new FileNotFoundException("data.txt is not existed");  //重新获取异常
            }
            finally
            {
                fs.Close();
            }
        }
 FileStream 下的引发的异常

 
附:异常层次图

相关文章

项目中经常遇到CSV文件的读写需求,其中的难点主要是CSV文件...
简介 本文的初衷是希望帮助那些有其它平台视觉算法开发经验的...
这篇文章主要简单记录一下C#项目的dll文件管理方法,以便后期...
在C#中的使用JSON序列化及反序列化时,推荐使用Json.NET——...
事件总线是对发布-订阅模式的一种实现,是一种集中式事件处理...
通用翻译API的HTTPS 地址为https://fanyi-api.baidu.com/api...