C#中类的异常处理详解

作者:Andy阿辉 时间:2023-02-21 17:25:01 

前言

日常编码过程中,最重要的技能不是说你学会使用很多最新的编程技术或者做出一个高大上的系统。而是你在写代码过程中,对异常的处理,是否系统可以稳定,健壮。

对于异常的处理在C#中是通过try/cath机制来捕获的,接下来我们一起来看看。

异常是程序中的运行时错误,它违法了系统约束或应用程序约束,或出现了在正常操作时未预料的情形。

比如对于某些变量的非正常赋值或者在参与运算操作时出现错误等。

异常

关于异常,在C#中通过try语句和处理异常机制类保证异常的捕获,防止由于异常的未捕获导致整个程序出现异常提醒,甚至出现崩溃。

异常的要求

try块包含为避免出现异常而被保护的代码

catch子句部分含有一个或多个catch子句。(处理异常代码段也叫做异常处理子程序)

finally块含有在所有情况下都要被执行的代码,无论有没有异常发生

class Program
{
   static void Main(string[] args)
   {
       try
       {
           //验证是否有异常的代码
           Ahui hui = new Ahui();
           InfoBase info = (InfoBase)hui;

Console.WriteLine(hui.GetInfo());
           Console.WriteLine(info.GetInfo());
       }
       catch (Exception ex)
       {
           //捕获异常,进行异常的处理

throw new Exception("异常向上一层抛出!");
       }            
       Console.ReadKey();
   }
}

在处理业务代码时,必须在刚开始就将逻辑上的错误都考虑清楚进行验证处理,比如判空,非正常值,值类型错误等。

其次在通过try/catch机制来捕获非正常的异常,防止程序出现无法把控的错误,导致奔溃。

提示:在业务程序中尽量少用异常进行捕获,如果条件满足要第一时间对异常进行前期处理。<Catch()中的异常处理时间会比较长,而且会导致系统资源被浪费(异常实时被往上抛出)。>

在C#中有很多不同类型的异常可能被发生,BCL定义了许多类,每一个类代表一个指定的异常类型。当一个异常发生时,CLR首先创建该类型的异常对象,其次寻找适当的catch子句以处理它。(所有的异常类都派生自System.Exception类)

关于catch()有三种形式,可以处理不同级别的异常。

第一种 一般异常处理

try
  {

}
  catch
  {
      //一般异常处理

}

能接受任何异常,但不能确认引起异常的类型。可对可能发生的异常进行普通处理和清理。

第二种 特定异常处理

try

}
   catch(Exception)
   {
       //特定异常处理

}

把一个异常类的名称作为参数,匹配该指定类或派生自它的异常类的异常。

第三种 带对象的特定异常处理

try

}
   catch(Exception ex)
   {

throw new Exception(ex.Message);
   }

可提供关于异常的多种异常信息,匹配指定的异常或派生自它的异常类的异常。通过异常实例,可得到异常的详细信息。

try

}
   catch (Exception ex)
   {
       //特定异常处理
       throw new Exception(ex.Message);
   }
   finally {
       //出现异常后的处理机制

}

这里需要特别说明下,关于finally中的代码,不管异常是否被捕获,它都会被执行。

在finally中适合存放释放资源或后续处理的代码。

基础知识日更已经29天,如果大家还想继续,可以给个关注,感谢您的支持。

寄语

人生短暂,我不想去追求自己看不见的,我只想抓住我能看得见的。

来源:https://blog.csdn.net/sinat_23966857/article/details/122952350

标签:C#,异常处理
0
投稿

猜你喜欢

  • Java内存模型之happens-before概念详解

    2023-11-23 03:11:50
  • 深入了解java NIO之Selector(选择器)

    2022-02-01 16:39:17
  • Android 实现调用系统照相机拍照和录像的功能

    2021-12-05 10:58:51
  • springboot相关面试题汇总详解

    2023-10-06 17:16:11
  • 创建Android守护进程实例(底层服务)

    2021-11-12 01:37:09
  • Android实现声音采集回声与回声消除

    2022-09-28 12:13:17
  • Java操作Excel的示例详解

    2021-07-08 00:56:56
  • C#中this指针的用法示例

    2021-07-21 14:12:24
  • Unity中的RegisterPlugins实用案例深入解析

    2022-04-02 10:14:41
  • java编码IDEA主题推荐

    2021-10-21 03:54:18
  • mybatis之如何获取表中某一列的最大值

    2022-03-26 08:38:53
  • SpringBoot通过源码探究静态资源的映射规则实现

    2022-03-26 19:05:53
  • 深入学习java位运算的基础知识

    2021-06-01 07:10:40
  • 详解spring mvc中url-pattern的写法

    2023-11-11 07:30:58
  • springboot实现多文件上传功能

    2022-05-31 22:49:10
  • Android实现短信验证码获取自动填写功能(详细版)

    2022-07-22 07:08:10
  • Java聊天室之使用Socket实现传递对象

    2023-02-07 15:28:52
  • C#通过正则表达式实现提取网页中的图片

    2022-03-30 05:03:03
  • Android实现左滑退出Activity的完美封装

    2023-09-19 21:11:59
  • Android显示富文本+夜间深色模式

    2023-11-11 12:33:59
  • asp之家 软件编程 m.aspxhome.com