`

C# 异常之体系

    博客分类:
  • C#
阅读更多
异常通常由应用程序(用户程序等)或运行库(公共语言运行库和应用程序运行库) 引发的异常.Exception是所有异常类型的基类. 当发生错误时,系统或当前正在执行的应用程序通过引发包含关于该错误的信息的异常来报告错误. 异常发生后,将由该应用程序或默认异常处理程序进行处理. 若干异常类都直接从Exception类继承,其中包括两种主要类型的异常类:
   1.ApplicationException 类,该作为用户定义的应用程序异常类型的基类.    2. SystemException类,该类型是预定义的公共语言运行库异常类的基类.
这两个异常类构成了几乎所有的应用程序和运行库异常的基础.

. 当错误(这些错误是失败的运行库检查,如数组越界等错误导致的)发生时, 运行库就会引发SystemException或其派生类类型的异常.

. 相反ApplicationException类型异常是由用户程序引发,而不是由运行库引发.如果要创建自己的异常的,应从 ApplicationException 或Exception 类派生这些异常. 不建议捕捉 SystemException, 在应用程序中引发SystemException 也不是好的编程做法. 而通常,大多数直接从Exception派生的异常不需要为 Exception类添加任何功能.

注意

通常我们所讲的异常一般都是指可与之交互的异常(也就是说我们可以对其进行一些处理,这些异常通常由应用程序引发),即非致命的异常.而象那些非常严重的异常,即那些由运行库引发或在不可恢复的情况中引发的异常,包括 ExecutionEngineException、StackOverflowException 和 OutOfMemoryException.

交互操作异常是从 SystemException派生并由 ExternalException进一步扩展的异常. 例如,COMException是 COM Interop 操作过程中引发的异常,它从 ExternalException 派生.Win32Exception和SEHException 也从ExternalException派生.

C# 异常的发生

. 公共语言运行库支持基于异常对象 和 受保护代码块概念的异常处理模型. 即当运行库在异常发生时,运行库就会创建一个表示该异常的对象. 当然你也可以通过从适当的基异常派生类来创建自己的异常类.

. 而当发生非致命应用程序错误时,就会引发ApplicationException 类及其派生类类型的异常.

. 我们可以通过使用Throw语句显式引发异常. 也可以使用Throw语句再次引发已经捕获的异常. 好的编码做法是向再次引发的异常添加信息以在调试时提供更多信息. 而异常的处理方法,在所有使用运行库的语言都以相似的方式处理异常. 即大多数语言都使用try/catch/finally形式的结构化异常处理.

C# 使用 try/catch 块捕捉异常

公共语言运行库提供一种异常处理模型,该模型基于对象形式的异常表示形式, 即将程序代码和异常处理代码分到try 块和 catch 块中.可以有一个或多个 catch块,每个块都设计为处理一种特定类型的异常,或者将一个块设计为捕捉比其他块更具体的异常. 如果要处理在应用程序在执行期间某代码块发生的异常,则必须先该代码块放置在 try 块中. (try 语句中的代码是try 块), 并将处理由try 块引发的异常的应用程序代码放在 catch语句中,称为catch块. 零个或多个catch块与一个 try 块相关联,每个 catch块包含一个确定该块能够处理的异常类型的类型筛选器.在try 块中出现异常时,系统按所关联 catch块在应用程序代码中出现的顺序搜索它们, 直到定位到处理该异常的catch块为止. 如果某catch块的类型筛选器指定了异常类型 T或任何派生由异常类型T派生的异常类型,的则该catch块处理 T类型及其派生类型的异常. 系统在找到第一个处理该异常的catch 块后即停止搜索.因此,正如本节后面的示例所演示的那样,在应用程序代码中处理某类型异常的 catch块必须在处理其基类型的 catch块之前指定,所以通常处理 System.Exception 的catch 块最后指定. 如果与try块相关联的所有 catch块均不处理该异常,且当前 try 块嵌套在其他 try 块中, 则搜索与上一级 try块相关联的 catch 块. 如果仍然没有找到用于该异常的catch 块, 则将该异常沿调用堆栈向上传递,搜索上一个堆栈帧(即当前方法(或函数)的主调方法(或函数)) 来查找处理该异常的catch 块,并一直查找,直到该异常得到处理或调用堆栈中没有更多的帧为止. 如果到达调用堆栈顶部却没有找到处理该异常的catch块,则由默认的异常处理程序处理该异常, 然后应用程序终止.

细节:当发生异常时,该异常会沿堆栈向上传递,并查找合适catch块. 由前面看出catch语句的顺序很重要,应该将针对处理特定异常的 catch块放在处理常规异常(一般指定某种异常的基类) catch块的前面,否则编译器可能会发出错误. catch块的查找方法是将异常的类型与 catch块中指定的异常名称进行匹配. 如果没有找到特定的catch块,则由存在的常规 catch块捕捉异常.如果也没有处理常规异常的 catch块,公共语言运行库捕捉catch 块没有捕捉的异常.根据运行库的配置,或者出现一个调试对话框, 或者程序停止执行并出现一个包含异常信息的对话框.

下面的代码示例使用 try/catch 块捕捉
InvalidCastException该示例创建一个名为 Employee的类,该类有单个属性——职员级别 (Emlevel). PromoteEmployee取得对象并增加职员级别. 将DateTime 实例传递给 PromoteEmployee方法时,发生 InvalidCastException.

using System;
public class Employee
{
   //Create employee level property.
   public int Emlevel
   {
      get
         {
         return(emlevel);
         }
      set
         {
         emlevel = value;
         }
   }
   int emlevel;
}
public class Ex13 
{
   public static void PromoteEmployee(Object emp)
   {
   //Cast object to Employee.
   Employee e = (Employee) emp;
   // Increment employee level.
   e.Emlevel = e.Emlevel + 1;
   }
   public static void Main()
   {
   try
      {
   Object o = new Employee();
   DateTime newyears = new DateTime(2001, 1, 1);
   //Promote the new employee.
   PromoteEmployee(o);
   //Promote DateTime; results in InvalidCastException as newyears is not an employee instance.
   PromoteEmployee(newyears);
      }
   catch (InvalidCastException e)
      {
      Console.WriteLine("Error passing data to PromoteEmployee method. " + e);
      }
   }
}


原文链接:http://old.blog.edu.cn/user2/53512/archives/2005/353811.shtml
分享到:
评论

相关推荐

    1300张图片训练效果

    1300张图片训练效果

    springboot116基于java的教学辅助平台.zip

    教学辅助平台的出现,是为了更好地服务于教育工作者和学生,提高教学效果和学习效率。该平台集成了多个功能模块,旨在为用户提供全面、便捷的教学辅助服务。 平台首页作为导航入口,提供了清晰的界面布局和便捷的导航功能,方便用户快速找到所需功能。需要注意的是,“首页”这一选项在导航菜单中出现了多次,可能是设计上的冗余,需要进一步优化。 “个人中心”模块允许用户查看和管理自己的个人信息,包括修改密码等账户安全设置,确保用户信息的准确性和安全性。 在教育教学方面,“学生管理”和“教师管理”模块分别用于管理学生和教师的信息,包括学生档案、教师资料等,方便教育工作者进行学生管理和教学安排。同时,“课程信息管理”、“科目分类管理”和“班级分类管理”模块提供了课程信息的发布、科目和班级的分类管理等功能,有助于教育工作者更好地组织和管理教学内容。 此外,“课程作业管理”模块支持教师布置和批改作业,学生可以查看和提交作业,实现了作业管理的线上化,提高了教学效率。而“交流论坛”模块则为学生和教师提供了一个交流和讨论的平台,有助于促进师生互动和学术交流。 最后,“系统管理”模块为平台管理员提供了系统配置.

    yolo算法-火灾探测数据集-3466张图像带标签-火灾fire_detect-oqlpv.zip

    yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值

    基于go语言的参数解析校验器项目资源.zip

    基于go语言的参数解析校验器项目资源

    matlab主成分分析代码

    matlab主成分分析代码

    华南农业大学在四川2020-2024各专业最低录取分数及位次表.pdf

    那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据

    Spire.XLS是一个基于.NET的组件

    Spire.XLS是一个基于.NET的组件,使用它我们可以创建Excel文件,编辑已有的Excel并且可以转换Excel文件.dll

    基于爬虫技术的股票分析系统.doc

    现如今,随着互联网的发展,人们获取信息的方式也各有不同。以前的传统方式的信息流与电视,报纸,书籍,信件,等等,因为互联网的使用,现在的互联网媒体已经成为人们获取信息的最重要来源。更新互联网,让人们得到最新、最完整的信息变得越来越容易。 现在企业已经越来越重视互联网所能带来的利益,借助互联网来对自己的企业进行营销推广已经获得绝大部分企业的认可。本文我们主要进行的是股票分析系统网站的设计。何为股票分析,就是指股票投资人之间的根据市场价格对已发行上市的股票进行的买卖。而国内股票市场的迅速发展让这次开发设计显得十分必要。通过该股票分析系统网站,我们可以随时随地通过该股票分析网站,了解股票行业最新信息;根据股票行业分析来进行相关交易。本网站采用的是Springboot技术和mongodb数据库,运用 stock、 vue2、echarts、bootstrap等技术,使用eclipse开发工具完成股票数据的爬取分析。

    厨房食品佐料检测数据集VOC+YOLO格式602张18类别.zip

    文件太大放服务器了,请先到资源详情查看然后下载 样本图参考:blog.csdn.net/2403_88102872/article/details/143395913 数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):602 标注数量(xml文件个数):602 标注数量(txt文件个数):602 标注类别数:18 标注类别名称:["apple","chocolate","cloth","cononut_water","detergent","fanta","gelatin","kuat","mustard","nescau","peanut","pear","sauce","shoyo","sponge","tangerine","tea","treloso"] 18种常见的厨房食品和佐料,包括苹果、巧克力、椰子水、洗涤剂、饮料、明胶、芥末、花生、酱油等

    基于卷积神经网络参数优化的情感分析论文code_cnn-text-classification.zip

    基于卷积神经网络参数优化的情感分析论文code_cnn-text-classification

    河北传媒学院在四川2020-2024各专业最低录取分数及位次表.pdf

    那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据

    Python实现的人脸识别系统及其应用

    内容概要:本文档详细描述了一个基于 Python 的人脸识别系统的构建过程,涵盖了从系统设计理念到具体功能实现的各个方面。首先介绍了系统总体设计流程,包括摄像头图像捕获、人脸检测、特征值计算、特征均值处理以及分类识别。接着深入探讨了 Dlib、NumPy、OpenCV 等关键技术库的应用,特别是 Dlib 人脸检测器接口、人脸预测器接口和人脸识别模型的具体使用方法。最后,本文档介绍了如何通过 Euclidean 距离进行人脸特征比对,实现人脸的成功识别与身份确认。此外,还讨论了人脸识别在实际生活中的多种应用场景和重要意义。 适用人群:具有一定编程基础的软件开发者和技术爱好者,尤其是从事机器学习、图像处理和计算机视觉领域的专业技术人员。 使用场景及目标:①开发人脸识别系统,实现实时图像处理和人脸特征提取;②掌握 Dlib、NumPy、OpenCV 等技术库的实际应用技巧;③深入了解人脸识别技术在安全监控、身份认证、智慧社区等领域的应用。 其他说明:本文档提供了丰富的理论背景和技术实现细节,帮助读者更好地理解和应用人脸识别技术。此外,还包括了一些实用的编码技巧和最佳实践,有助于提高开发效率和代码质量。

    轻量级高性能GO语言开发框架。支持MVC、依赖注入、动态返回.zip

    轻量级高性能GO语言开发框架。支持MVC、依赖注入、动态返回

    stm32的串口hex文件发送与文本文件发送

    stm32的串口hex文件发送与文本文件发送

    广西医科大学在四川2020-2024各专业最低录取分数及位次表.pdf

    那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据

    macOS_Sonoma_14.1.1.rdr.split.003

    macOS_Sonoma_14.1.1.rdr.split.003

    天津财经大学珠江学院在四川2020-2024各专业最低录取分数及位次表.pdf

    那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据

    400699526844862小爱同学.apk

    400699526844862小爱同学.apk

    微信小程序在校内服务平台的应用及开发

    内容概要:本文介绍了基于微信小程序的校园一体化服务平台的设计与开发。该平台利用微信小程序的便捷性和广泛的用户基础,结合JSP技术和MySQL数据库,实现了个人中心、用户管理、寻物启事管理、物品分类管理、失物招领管理、表白广场管理、吐槽大会管理、二手交易管理、交易类型管理、拼车出行管理和系统管理等多项功能。整个系统具有操作简单、易维护、灵活实用等特点。 适合人群:具有一定编程基础的学生和教师,以及希望深入了解微信小程序开发的技术人员。 使用场景及目标:主要用于高校内的信息管理,如失物招领、物品分类、二手交易等,提升校园生活的便捷性和效率,改善用户体验。 其他说明:系统开发过程中,重点考虑了技术可行性、经济可行性和操作可行性,并进行了详细的系统测试,确保系统的稳定性和可靠性。

    Java课程设计之销售管理系统

    (1)课程设计项目简单描述 鉴于当今超市产品种类繁多,光靠人手动的登记已经不能满足一般商家的需求。我们编辑该程序帮助商家完成产品、商家信息的管理,包括产品、客户、供应商等相关信息的添加、修改、删除等功能。 (2)需求分析(或是任务分析) 1)产品类别信息管理:对客户的基本信息进行添加、修改和删除。 2)产品信息管理:对产品的基本信息进行添加、修改和删除。 3)供应商信息管理: 对供应商的基本信息进行添加、修改和删除。 4)订单信息管理:对订单的基本信 息进行添加、修改和删除。 5)统计报表:按选择日期期间,并按产品类别分组统 计订单金额,使用表格显示统计结果

Global site tag (gtag.js) - Google Analytics