C# 自定义异常总结及严格遵循几个原则_实用技巧

在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属性进行查看内部异常。

时间: 2024-10-02 03:17:43

C# 自定义异常总结及严格遵循几个原则_实用技巧的相关文章

高质量外链建设必须遵循的五大原则

相信很多seo都明白外部链接的重要性.在笔者看来,seo其实就是内容和链接,内容这里笔者就不讲诉了.链接主要分为站内链接和外部链接,这里笔者不要强调外部链接建设,相信很多站长朋友们都在努力建设外部链接.笔者认为很多人还是忽视了增加外部链接时应该遵循的几大原则.下面就来简单的讲解下外部链接建设时应该遵循的原则: 一.质量高于数量 为什么我会把这点放在第一位,其实还是想让更多的朋友明白不要一味的去增加外链的数量而忽视了质量.在笔者看来一条质量高的外链胜过十条垃圾外链.这里笔者建议大家还是花点时间去写

外链要遵循两个原则:相关性和广泛度

摘要: 这几天有朋友问萧涵企业网站进行SEO优化时如何建设外链,这个问题可能是很多SEO工作者目前问得较多的,外链建设是我们SEO工作中非常重要的一部分,但是我们看到现在很多SEO朋友一 这几天有朋友问萧涵"企业网站进行SEO优化时如何建设外链",这个问题可能是很多SEO工作者目前问得较多的,外链建设是我们SEO工作中非常重要的一部分,但是我们看到现在很多SEO朋友一直在抱怨外链不好做,特别是企业网站,资源实在很少.而我也一直强调外链的相关性及广泛度的重要,所以看起来确实很难做,所以在

杨明生:保险资金运用必须遵循稳健安全性原则

--访中国保险监督管理委员会副主席杨明生 ■本刊记者 张晓莹 记者:非常感谢您接受<中国金融>杂志的采访.保监会在2010年8月发布的<保险资金运用管理暂行办法>以及9月初发布的<保险资金投资不动产暂行办法>和<保险资金投资股权暂行办法>是构建保险资金运用政策法规体系的重要组成部分.结合我国保险资金运用改革发展的现状,请您谈谈三个办法起草和发布的背景. 杨明生:近两年来,国际.国内经济金融运行出现了一些新情况.新问题和新趋势,保监会综合考虑外部环境变化和行业

简单理解遵循接口隔离原则的Java设计模式编程_java

定义:客户端不应该依赖它不需要的接口:一个类对另一个类的依赖应该建立在最小的接口上. 问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法. 解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系.也就是采用接口隔离原则. 举例来说明接口隔离原则:  这个图的意思是:类A依赖接口I中的方法1.方法2.方法3,类B是对类A依赖的实现.类C依赖接口I中的方法1.方法4.方法5,类D

外链建设最需要遵循的黄金原则

外部链接是搜索引擎为你的网站权重做评判的标准之一,丰富的外部链接资源可以帮你轻松提高搜索引擎的权重,从而让你网站的收录.排名都得到比较好的效果.对于个人网站而言,丰富的原创文章是比较困难的,这时外链就成了更为关键的因素.因此,外链建设的重要性再怎么强调也不为过的.但是在建设外部链接时,需要遵循以下几个原则,方能起到事半功倍的效果,否则就可能收效甚微甚至适得其反. 一.质量高于数量 质量高于数量,低质量的外部链接你弄得再多,也比不上一个高质量外部链接的作用.不要把外部链接的数量作为你工作的指标,一

ERP中的标准成本应用应遵循的七原则

主流的ERP产品均包括标准成本管理,也有企业单独采用第三方的成本管理系统.标准成本的管理依赖于标准的相对性和企业经营环境的复杂程度,对于经营环境多变的企业来说,差异的设定.计算和分析无疑是件痛苦的事情.标准成本的应用主要应遵循以下原则: 1.企业环境相对稳定 事实上随着竞争的加剧和风险的增加,企业的经营环境已经发生了巨大变化.无论http://www.aliyun.com/zixun/aggregation/8150.html">传统行业还是新兴行业都随时面临经营环境的变化.而国内企业受到

网站关键词的选择及拓展应该遵循怎样的原则

在一个网站完成建站之前,我们首先要做的是对于网站关键词的选取,这关系到网站的主题及未来的流量及排名,可谓是一个网站的心灵所在,如何做好网站关键词的正确选择则显得尤为重要.本文罗列一些关键词的选取方法以便帮助大家更好的做好网站的优化工作,此外,对于一些业内人士,本文也会相应帮助大家制定一些报价的原则,避免耗费大量的精力将关键词排名做上去,回报却寥寥无几. 我们选选择一个主题作为例子,如我们需要做"酒店预订",首先,我们的主体页面首页的关键词必然要和酒店预订相同或相关,更为重要的一点是,我

网站优化之url设计应遵循的六大原则

UEO这个词相信大家也不陌生,中文意思就是用户体验.现在很多网站都注重用户体验,毕竟我们做网站最终是服务于用户,所以我们在网站设计和优化时也要考虑用户体验.用户体验的范围很广,这里主要讲述从用户体验的角度来分析网站的url设计,简单的说,url应该清晰友好,方便记忆.那么我们在网站建设中应该如何去设计url呢?下面就由笔者来讲述url设计的八大原则. 一.url月简洁越好 我们举个例子来说,假如你看到了一个非常长的url,给你的第一感觉是怎样的?同样,我们的用户面对着冗长的url地址,肯定也会产

浅析网站买卖所要遵循的三大原则

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 现在很多站长朋友做网站都是为了提高自己网站流量,然后买广告赚钱,可是大家有没有想到通过买卖网站赚钱呢?大家还记得当年的电影<大腕>里面有一段经典的台词吧,"现在做网站,找个枪手炒作一下,流量上来了,直接在原来的投资后面加上一个零卖给下家"可见买卖网站可以让你获得超过十倍的利润,是不是让很多站长朋友们心动呢?要想