技术开发 频道

ICE框架之Sclice2CSharp映射---异常的处理


【IT168技术文档】

  任何操作调用都可以抛出运行时异常,而且,如果操作有异常规范,还可以抛出用户异常。假定我们有这样一个简单的接口:
exception Tantrum { string reason; }; interface Child { void askToCleanUp() throws Tantrum; };
  Slice 异常是作为C# 异常抛出的,所以你可以把一个或更多操作调用放在 try–catch块中:
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 提供的是弱异常保证(这是出于性能的原因) ,没有提供强异常保证。
0
相关文章