博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】C#自定义异常类简介
阅读量:7106 次
发布时间:2019-06-28

本文共 2014 字,大约阅读时间需要 6 分钟。

文章来源:

摘要:本文解决了C#异常类的自定义问题。我们可以捕获一个通用的异常,识别它和应用程序的关系,然后把它作为特定于应用程序的异常再次抛出,以便能适当地处理它。

首先我们建立自己的C#异常类 CustomException,它要继承自ApplicationException类(这是一个在发生非致命的应用程序错误时抛出的通用异常,它又继承于更为通用的Exception类),将其用作为应用程序定义的任何自定义异常的基类。通过这个基类,我们就可以编写一个通用的catch代码块,捕获应用程序定义的任何自定义异常类型。

    自定义的异常类型可以在这中间扮演一个非常重要的角色。我们可以捕获一个通用的异常,识别它和应用程序的关系,然后把它作为特定于应用程序的异常再次抛出,以便能适当地处理它。

    这里构建了一个简单的场景,使用Northwind数据库,向其中添加一条Customer记录,如果ID重复则抛出相应的异常信息。

    (1) 定义我们的基础异常类   

  1. public class CustomException:ApplicationException       
  2. {        
  3.    public CustomException()      
  4.      {      
  5.     }      
  6.       public CustomException(string message, Exception inner)
  7. :base(message,inner)     
  8.      {    
  9.  
  10.       }   
  11.     }  

    定义两个处理异常的方法,使用base关键字让CustomException方法继承自基本的错误异常类ApplicationException并提供了两个参数,一个异常消息参数和一个异常错误类。

    (2) 然后我们再定一个处理我们不同自定义错误类型的错误处理类,不同的应用程序异常类型使用不同的异常处理类。   

 

  1. public class DuplicateCustomerIDException : CustomException      
  2.  {         
  3.   public DuplicateCustomerIDException()          
  4.  {          
  5.  
  6. }          
  7.  
  8. public DuplicateCustomerIDException(string message, Exception inner):
  9. base(message,inner)          
  10.  {         
  11.  
  12.  }      
  13.  }  

    当出现相应类型的异常时,在这个自定义异常处理中可以在出现错误的时候做一系列的处理,然后再抛出异常信息,例如:记录错误日志,或者做容错处理等。

    (3) 最后我们在添加客户记录的时候,使用我们自定义的C#异常类        

  1. private void AddCustomerRecord()          
  2.  {               
  3. SqlConnection cn = new SqlConnection(DBConn);               
  4. cn.Open();               
  5.  try               
  6. {                   
  7. SqlCommand com = new SqlCommand(
  8. "Insert Into Customers (CustomerID,CompanyName,ContactName) Values ('"
  9. +ftxt_CustomerID.Text+"','"+ftxt_CompanyName.Text+"','"
  10. +ftxt_ContactName.Text+"')",cn);                  
  11.  
  12. com.ExecuteNonQuery();               
  13. }              
  14.  catch(SqlException ex)               
  15. {                  
  16.  if(ex.Number == 2627)                   
  17. {                      
  18.  throw new DuplicateCustomerIDException("CustomerID重复",ex);                   
  19. }                   
  20. else                  
  21.  {                       
  22. MessageBox.Show(
  23. "成功","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information,
  24. MessageBoxDefaultButton.Button1,
  25. MessageBoxOptions.DefaultDesktopOnly);                  
  26.  }              
  27.  }              
  28.  finally              
  29.  {                   
  30. cn.Close();               
  31. }          
  32.  }  

    其中的ex.Number == 2627就是由于数据表中主键重复不能添加重复主键的记录时抛出的异常号码,如果异常类型符合怎抛出我们自定义的异常处理类。

(4) 最后我们在调用这个方法时,编写代码捕获这个我们自定义类型的异常      

  1. private void fbtn_Submit_Click(object sender, System.EventArgs e)             
  2. {                 
  3. try                
  4. {                   
  5.   AddCustomerRecord();                
  6.  }                 
  7. catch(DuplicateCustomerIDException ex)              
  8.   {                     
  9. MessageBox.Show(ex.Message);                 
  10. }             
  11. }   

    以上就实现了C#异常类的自定义。

转载于:https://www.cnblogs.com/yhlx125/articles/2555118.html

你可能感兴趣的文章
get与post提交方式的区别
查看>>
分布式文件系统FastDFS介绍安装配置
查看>>
Kubernetes 控制器之 Deployment 介绍(六)
查看>>
LNMP构建编译安装zabbix
查看>>
Linux文本处理三剑客之sed
查看>>
OSPF基本配置
查看>>
第 3 章 镜像 - 016 - Dockerfile 常用指令
查看>>
基于python的web应用(一)
查看>>
什么是SEM
查看>>
Citrix Licensing Help
查看>>
究极!ThinkPHP 3.2.2 框架源码逐行分析(一)
查看>>
linux学习(2)--指令
查看>>
Dubbo基础篇_02_Zookeeper注册中心安装测试
查看>>
mysql慢查询日志
查看>>
sed 常用命令总结
查看>>
unity中经常用到的语句(1)
查看>>
Ubuntu 18.04下可视文件管理器Midnight Commander的安装使用
查看>>
sqoop内部结构
查看>>
MySQL5.7 切不要"乱射" --transaction-write-set-extraction=MURMUR32
查看>>
ip tcp udp首部
查看>>