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 提供的是弱异常保证(这是出于性能的原因) ,没有提供强异常保证

原文地址:https://www.cnblogs.com/zhangronghua/p/1203799.html