此文章是给多层开发的人使用的,小型代码,或者不理解多层开发的朋友,请绕道.

多层开发已经很普遍,最少有2层.
1:表现层(显示数据,图形处理,等等)
2:处理层(逻辑处理,具体执行操作)

或者可以分得更细,具体问题具体分析嘛.

但是,在多层中,总是会有错误发生,大多数错误都是可以捕捉到的,或者是已经知道会发生的.
那么,如果在某一层抛出异常,怎么办?难道像某些人说的一层一层向上递归,最后在显示层显示?
这当然是不现实的!

当然,代码包括2部分:1健壮的代码 2:怀疑的代码
健壮的代码意思是:出错的几率很低,几乎不可能出错
怀疑的代码意思是:可能会在某种情况下出错,比如数据库连接,谁知道什么时候数据库会出现问题呢.

(1)我可以这么设计,一个模块,专门处理异常,或者一个类专门处理异常.
那这个异常类本身如果出现问题,那只能忽略.
如果异常类本身出现异常,如果不忽略,那就会调用自身,自身异常反复调用直到堆栈益出.
所以:总结一点,错误处理类(模块)必须健壮,并且一但本身出错,忽略,不能再次调用本身的错误处理功能.

(2)那么,这个处理类该怎么写呢?
1:处理类 public class Exeception{} //专门用于处理错误
2:错误消息 public class ExeceptionMessage{} //用于描述错误信息,和错误类型
但这里有个问题,处理类太死板了.而且一般错误处理类是写在程序的最底层的.
程序的层之间是单向的,不能出来依赖调用问题.(高层调用底层,底层不能调用高层)
所以,按这个逻辑,这个错误处理类如果写在底层,如何让高层的显示层显示呢?
那怎么办?事件委托就可以OK了.(具体事件可以在程序加载时由显示层注入)

我大概说一下方案,具体实现要你们自己实施.(当然我写的比较粗糙)
//错误消息
public class ExeceptionMessage
{
         public string Name;//错误名称
         public string Source;//错误来源
         public string Message;//错误具体的描述
         public int Leave;//错误等级,比如-1表示必须停止程序,0表示警告 1表示提示.
}

//-->在这里,先写事件,因为过后会要用到
//错误参数,事件用到的函数参数
public class ExeceptionEventArgs:EventArgs//必须从EventArgs继承.
{
         public ExeceptionMessage ExeceptionMessage;

public ExceptionEventArgs(){}//默认构造

//构造并给一个值给成员 ExeceptionMessage 以便参数传递
        public ExeceptionEventArgs(ExeceptionMessage m)
        {
             ExeceptionMessage=m;
        }
}

//定义错误委托声明(参数就是上面刚刚申明的)
public delegate void ExeceptionEventHandle(ExeceptionEventArgs e);

//主要的东西来了,这就是错误处理主程序
//我写的比较简单,大家可以自由发挥
public class Exeception
{
       //委托事件实例,就是那个delegate建出来的,但实例时,必须用event
       //建了这个,就会出现类似OnClick+=那种闪电类型,嘿嘿
       public event ExeceptionEventHandle OnExeception;

//处理主函数
       public void ThrowExeception(ExeceptionMessage m)
      {
            //这里省略,你可以写一些自己的基本代码
            //....比如你可以建一个错误列表等等,随你
            if(m!=null && OnExeception!=null)//检查错误消息是否为空&错误事件是否为空
            {
                  //调用刚才建立的委托实例.
                  OnExeception(new ExeceptionEventArgs(m));

//这里看等级,看看要不要终止程序
                  if(m.Leave==-1)
                   {
                      ........//程序停止代码
                   }

}
            else{.......//如果传来的错误消息有问题,忽略(我在这故意这么写的)}
        }
}

这样一个简单的错误处理就出来了,当然,这个模型本身没有任何的处理事件

事件要靠注入(我用了注入这个名字,因为我觉得更恰当些)

如何使用呢?

在整个程序初始化过后,或者某个自己认为恰当的地方,把某个函数注入进去

//打比方在主函数注入.
//注意:前提是错误处理类是一个静态函数.(当然我写的不是静态的,你可以改)
//程序就一般只有一个错误处理模块,可以写成静态的.
public static void Main()
{
      //这里就可以注入一个与错误处理类无关的显示函数了.
      //这就实现了错误处理与表现无关的问题.
      //你可以在任何的层抛出异常,并由表现层来显示.
      Exeception.OnExeception+=new ExeceptionEventHandle(.....);
}

转载于:https://www.cnblogs.com/dudu837/archive/2009/05/21/1486430.html

C# 如何处理抛出的异常,或者已知的错误相关推荐

  1. 如何处理构造函数抛出的异常?

    google "如何处理构造函数抛出的异常" 转载于:https://blog.51cto.com/guli3057/1228531

  2. 说说如何抛出Java异常

    以下是本人的一些分享,我热爱编程,希望能多交编程的爱好者,如果你也是其中一名,那么请加好友,大家关注一下,下面的文章是自己觉得一些有用的东西,留下来给自己当笔记,当然也希望能帮助到你,首先感谢你的阅读 ...

  3. 第8集析构函数中抛出的异常

    前两篇文章讨论了对象在构造过程中(构造函数)和运行过程中(成员函数)出现异常时的处理情况,本文将讨论最后一种情况,当异常发生在对象的析构销毁过程中时,又会有什么不同呢?主人公阿愚在此可以非常有把握地告 ...

  4. 第7集 构造函数中抛出的异常

    上一篇文章简单讨论了一下对象的成员函数抛出异常时的处理情况.本文中将继续讨论当在构造函数中抛出异常时,程序的执行情况又如何?这有点复杂呀!而且主人公阿愚还觉得这蛮有点意思! 构造函数中抛出的异常 1. ...

  5. Spring-AOP @AspectJ进阶之绑定抛出的异常

    文章目录 概述 实例 总结 概述 和通过切点函数绑定连接点信息不同,连接点抛出的异常必须使用AfterThrowing注解的throwing成员进行绑定 实例 代码已托管到Github-> ht ...

  6. List 在迭代时可能抛出的异常

    今天在做小练习时遇到有关List在迭代时的一些小问题.写出与大家一起共享下吧..呵呵... ===================代码============================ publ ...

  7. controller的异常处理以及service层的事务控制___controller层 trycatch不影响service层抛出的异常

    controller的异常处理以及service层的事务控制 最近写代码涉及到一些事务,上午终于把代码给理顺了,之前不太清楚在哪里做异常处理,导致代码遍地try-catch,相当难看. 还是基于con ...

  8. java 捕捉的异常抛出_Java异常抛出和捕获

    Java中把非正常情况分为两种,异常(Exception)和错误(Error). 异常.png Error:一般是指与虚拟机相关的问题(虚拟机错误.线程死锁等),这种错误无法回复或不可能捕获 Exce ...

  9. 获取线程中抛出的异常信息

    1 ScheduledExecutorService service = Executors.newScheduledThreadPool(10); 2 // 从现在开始delay毫秒之后,每隔一天执 ...

最新文章

  1. SVG 图像入门教程
  2. windows环境实现批量加密文件,并创建加密文件同名(不带后缀)的文件夹,然后把加密文件和图片和文本放入这个文件夹。
  3. 如何释放mysql连接资源_CI框架出现mysql数据库连接资源无法释放的解决方法
  4. c语言设计第4章答案,《C语言程序设计》第4章习题答案.doc
  5. 安装thinkphp,其实就是下载thinkphp,然后放到网站根目录下就可以直接使用了。
  6. 大数据(7) - zookeeper的安装与使用
  7. idea uml图各符号含义_设计模式-UML类图的各符号含义(转)
  8. CentOS 7下限制ip访问
  9. C语言随机产生26个大写字母
  10. 互联网日报 | 微博开启视频号内测;淘宝正式进军教育领域;小米声学语音技术实现全面自研...
  11. java 翻译 go语言_【翻译】go是面向对象语言吗?
  12. rip路由协议计算机网络实验报告,RIP 动态路由协议的配置(实验报告).doc
  13. SRGAN 论文学习
  14. TFTP协议详细分析
  15. 打印html java 清晰度_java 利用jsp打印html页面
  16. 工作态度-《精要主义》书中的精髓:我们如何践行精要主义,摆脱拥挤不堪的生活?
  17. 那些年我们错过的markdown
  18. 北京学习linux,北京linux学习
  19. 5分钟破解诺基亚Symbian9.2 S60V3三版手机方法总结
  20. 两分钟教你使用两款可视化工具

热门文章

  1. PyQt5学习--基本窗口控件--QMainWindow
  2. qlv文件怎么转换成mp4_flv怎么转换成MP4格式
  3. 2018-12-28
  4. 英文文档: 如何使用 OpenSSL 创建与吊销数字证书
  5. 【转载】令人作呕的OpenSSL,转自CSDN博主Bomb250
  6. 使用GDAL对静止卫星圆盘数据进行校正(以FY2为例子)
  7. Unity编辑器定制和开发插件
  8. C#中跨线程操作控件
  9. 阿里服务器降温系统,双十一服务器靠“泡澡”降温?阿里看上了3M的这项“冷”科技...
  10. 小程序和vue语法对比_商城小程序对比传统电商的优势如何?