激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - C# 自定義異常總結及嚴格遵循幾個原則

C# 自定義異常總結及嚴格遵循幾個原則

2019-10-13 14:16C#教程網 ASP.NET教程

在C#中所有的異常類型都繼承自System.Exception,也就是說,System.Exception是所有異常類的基類. 總起來說,其派生類分為兩種,需要了解的朋友可以參考下

在C#中所有的異常類型都繼承自System.Exception,也就是說,System.Exception是所有異常類的基類. 總起來說,其派生類分為兩種: 
1. SystemException類: 所有的CLR提供的異常類型都是由SystemException派生。 
2. ApplicationException類: 由用戶程序引發,用于派生自定義的異常類型,一般不直接進行實例化。 

創建自定義異常類應嚴格遵循幾個原則 
1. 聲明可序列化(用于進行系列化,當然如果你不需要序列化。那么可以不聲明為可序列化的) 
2. 添加一個默認的構造函數 
3. 添加包含message的構造函數 
4. 添加一個包含message,及內部異常類型參數的構造函數 
5. 添加一個序列化信息相關參數的構造函數. 

復制代碼代碼如下:


using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Runtime.Serialization.Formatters.Binary; 
namespace ConsoleApplication3 

[Serializable] //聲明為可序列化的 因為要寫入文件中 
public class PayOverflowException : ApplicationException//由用戶程序引發,用于派生自定義的異常類型 

/// <summary> 
/// 默認構造函數 
/// </summary> 
public PayOverflowException() { } 
public PayOverflowException(string message) 
: base(message) { } 
public PayOverflowException(string message, Exception inner) 
: base(message, inner) { } 
//public PayOverflowException(System.Runtime.Serialization.SerializationInfo info, 
// System.Runtime.Serialization.StreamingContext context) 
// : base(info, context) { } 

internal class Employee 

public int ID { get; set; } 
public string Name { get; set; } 
/// <summary> 
/// current pay 
/// </summary> 
public int CurrPay { get; set; } 
public Employee() { } 
public Employee(int id, string name, int currpay) 

this.ID = id; 
this.Name = name; 
this.CurrPay = currpay; 

/// <summary> 
/// 定義一個GiveBunus的虛方法以供不同的派生類進行重載 
/// </summary> 
/// <param name="amount">獎金額度</param> 
public virtual void GiveBunus(int amount) 

//用一個臨時變量記錄遞增之前的值 
var pay = CurrPay; 
this.CurrPay += amount; 
if (CurrPay > 10000) 

//發生異常,將CurrPay的值進行恢復, 
//并拋出異常,外部程序捕獲次異常 
this.CurrPay = pay; 
var ex = new PayOverflowException("The employee's max pay should be no more than 10000."); 
throw ex; 



class Program 

static void Main(string[] args) 

Console.WriteLine("**** 創建Employee對象,并用try/catch捕獲異常 *****"); 
var emp = new Employee(10001, "Yilly", 8000); 
try 

emp.GiveBunus(3000); 

catch (PayOverflowException ex) 

Console.WriteLine("異常信息:{0}\n發生于{1}類的{2}方法", ex.Message, 
ex.TargetSite.DeclaringType, ex.TargetSite.Name); 
try 

var file = new FileStream(@"c:\customerexception.txt", FileMode.Create); 
//*** 異常信息寫入文件中的代碼省略... 
//以序列化方式寫入 
BinaryFormatter bf = new BinaryFormatter(); 
bf.Serialize(file, ex); 
file.Close(); 
//以字節方式寫入 
//byte[] buffer = System.Text.Encoding.Default.GetBytes(ex.Message); 
//int leng = 0; 
//leng = buffer.GetLength(0); 
//file.Write(buffer, 0, leng); 
//file.Close(); 

catch (Exception ex1) 

var inner = new PayOverflowException(ex.Message, ex1); 
throw inner; 





值得注意的是:在實例化的時候調用的是PayOverflowException(string message, Exception inner)構造函數, 
如果本程序如果有其他程序在調用的時候, 可以通過.InnerExcetpion的Message屬性進行查看內部異常。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 天天舔夜夜操 | h视频免费看 | 免费a视频 | 亚洲一区 国产精品 | 国产一及毛片 | 蜜桃视频最新网址 | 中文字幕一区2区 | 操碰| 成人福利视频 | 国产99久久久久久免费看农村 | 亚洲欧美国产视频 | 国产精品高清一区 | www.91视频com | 久久福利精品 | 91看片淫黄大片欧美看国产片 | 13一14毛片免费看 | 国产一区二区免费 | 久久激情小视频 | 欧美一级全黄 | 天堂二区 | 欧美成人免费小视频 | 欧美成人一区二区三区 | 免费一级电影 | 最近中文字幕一区二区 | 一级空姐毛片 | 狠狠操人人干 | 午夜天堂在线视频 | 国产成人高潮免费观看精品 | 免费观看视频网站 | 精品一区二区三区中文字幕老牛 | 国产亚洲精品久久久久久久久久 | 一级黄色免费观看视频 | 国产亚洲精品久久777777 | 免费男女乱淫真视频 | 青热久思思 | 亚洲一区成人 | 精品成人免费一区二区三区 | 欧美一区二区网站 | 国产在线观看精品 | 99国产精品白浆在线观看免费 | 成年免费大片黄在线观看岛国 |