在c#中我们是可以自定义异常,然后在代码中看到违反我们异常的情况,用throw 我们的异常的方法来抛出异常并捕捉比起标准异常的方法编译器就能识别到并自动抛出的情况,我们这种方法实在有点太傻了,还要在代码里自己throw自己的异常我想问的是,对于我们自定义的异常,编译器能不能识别到违反异常的情况后就自动抛出呢,不要我们手写代码throw自己的异常这样的

解决方案 »

  1.   

    什么叫"标准异常的方法编译器就能识别到并自动抛出"编译器怎么会抛异常??你所谓的那些标准异常也都是微软的程序员手写代码throw出来的(也就是写在.net framework Class Library里的),不是编译器抛的.编译器只是把你的代码编译成IL代码而已,不会有任何的逻辑处理.
      

  2.   

    哦,当我表达错误吧
    我的意思其实是说,当你代码中有些东西违反了标准异常时,如果没有try catch的话,程序不是当掉了吗?比如cmd窗口就跳出来,提示违背了哪些哪些异常
    现在我们自定义的异常,如果程序中违背了,在不要我们用
    if(违背我们异常的条件成立)
    throw我们的异常
    的情况下,能不能也聪明点运行到违反我们异常处就自己让程序当掉呢
      

  3.   

    你可以选择让他自动抛,甚至不用去自定义异常,他也会抛,只不过抛出来的方式不是你想要的,而且有时候,我们写try-catch-throw不仅仅是为了抛异常,还为了进行一些特别的处理(程序此时不一定“当”掉),这种处理方式必须通过你自己的定义来完成
      

  4.   

    异常都没有自动抛出的你看到的所谓的自动抛出,其实也是别人写代码抛的,比如写Library的人在组件里写代码抛出的.我们自定义异常的目的,是为了通过异常类型来表达出一定的业务含义,或是定义自己的一些处理方式,可以利用到面向对象里多态的特性.主要都是为了处理异常的时候的方便和容易扩展.如果你不写
    if(违背我们异常的条件成立) 
    throw我们的异常 系统怎么知道是不是该抛出异常当掉呢?
      

  5.   

    哦,possible_Y 说得好像有道理,那就是说,我们无法达到不写 
    if(违背我们异常的条件成立)  
    throw我们的异常  
    就自动抛异常的目的了是吗?
    再挂一会帖子,看看有没其他观点。
      

  6.   

    其实我想说的是,在程序中是不是可以不写
    if(违背我们异常的条件成立)   
    throw我们的异常   
    这样的代码,把他写在某些地方,比如那个异常类里面
    就像,net自己的异常做的那样,
    能在程序中什么都看不到,到了违背异常的时候他就抛了
      

  7.   

    if(违背我们异常的条件成立)    
    throw我们的异常这就是判断违背规则的过程,你可以写在类里面,但不是异常类里面,异常类是用来描述你这个规则的
      

  8.   

    不行只是try{}catch{}可以不写在程序里,而通过AOP的方式来切入管理,或则是在程序最外层边界来统一捕获处理(比如ASP.net里的Global.asax的Applicaton_OnError或Winform的AppDomian的未处理异常事件).但是throw肯定不能省,省了谁知道该在什么时候抛什么异常啊...
      

  9.   

    先结了把,感谢possible_Y的大力支持