• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【转】C#自定义异常类简介

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

文章来源:http://www.csharpwin.com/csharpspace/7788r1541.shtml

摘要:本文解决了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#异常类的自定义。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
谈谈C#基元类型发布时间:2022-07-13
下一篇:
C#设计模式总结发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap