zoukankan      html  css  js  c++  java
  • ICE框架之Sclice2CSharp映射---异常的处理

     任何操作调用都可以抛出运行时异常,而且,如果操作有异常规范,还可以抛出用户异常。假定我们有这样一个简单的接口:

              exception Tantrum {

                  string reason;

              };

              interface Child {

                  void askToCleanUp() throws Tantrum;

              };

    Slice 异常是作为C# 异常抛出的,所以你可以把一个或更多操作调用放在 trycatch块中:

              ChildPrx child = ...;    // Get child proxy...

              try {

                  child.askToCleanUp();

              } catch (Tantrum t) {

                  System.Console.write("The child says: ");

                  System.Console.writeln(t.reason);

              }

    在典型情况下,你只需针对操作调用捕捉你感兴趣的一些异常;其他异常,比如意料之外的运行时错误,通常会由更高层次的异常处理器来处理。例如:

              public class Client {

                  static void run() {

                      ChildPrx child = ...;    // Get child proxy...

                      try {

                          child.askToCleanUp();

                       } catch (Tantrum t) {

                          System.Console.Write("The child says: ");

                          System.Console.Write(t.reason);

                          p.scold();               // Recover from error...

                       }

                      p.praise();                  // Give positive feedback...

                  }

                  public static void

                  main(String[] args)

                  {

                      try {

                          // ...

                          run();

                          // ...

                       } catch (Ice. Exception e) {

                          System.Console.Write(e);

                       }

                  }

              }

    出于局部的考虑,这段代码会在调用的地方处理一个具体的异常,并且一般化地处理其他异常 .

     注意,异常的ToString方法会输出异常的名称、内部异常的信息以及踀痕迹,当然你可以选择显示异常的那些信息,比如你可以用e.GetType().Name只输出异常的名字。

    异常与out 参数

    当操作抛出异常时,Ice run time 不保证out 参数的状态:参数的值可能没有变,也可能已经被目标对象中的操作实现改变了。换句话说,对于输出参数,Ice 提供的是弱异常保证(这是出于性能的原因) ,没有提供强异常保证

  • 相关阅读:
    Leetcode 92. Reverse Linked List II
    Leetcode 206. Reverse Linked List
    Leetcode 763. Partition Labels
    Leetcode 746. Min Cost Climbing Stairs
    Leetcode 759. Employee Free Time
    Leetcode 763. Partition Labels
    搭建数据仓库第09篇:物理建模
    Python进阶篇:Socket多线程
    Python进阶篇:文件系统的操作
    搭建数据仓库第08篇:逻辑建模–5–维度建模核心之一致性维度2
  • 原文地址:https://www.cnblogs.com/zhangronghua/p/1203799.html
Copyright © 2011-2022 走看看