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

    下图显示了异常的继承关系:


    下图显示了异常的继承关系:

    图中所有的异常都继承自System.ApplicationException异常类,Ice.Exception是System.ApplicationException的子类,而分别用来表示ice run time异常和用户异常的Ice.LocalException、Ice.UserException类则是Ice.Exception类的子类。

    Ice.Exception类的构造函数如下:

    public abstract class Exception : System.ApplicationException

      {

            public Exception();

            public Exception(System.Exception ex);

    }

    每一个继承自Ice.Exception的类都要实现这两个构造函数。第二个构造函数需要一个参数,构造函数用这个参数来初始化继承自ApplicationException类的InnerException属性的值;上面所说的两个构造函数都会将Message属性设为String.Empty。

    下面是一些Slice异常的定义:

    exception GenericError {                  string reason;             };

    exception BadTimeVal extends GenericError {};

    exception BadZoneName extends GenericError {};

    上面这些定义用Slice2C#生成的代码如下:

    public class GenericError : Ice.UserException

    {

       public string reason;

       public GenericError();

       public GenericError(System.Exception ex__);

       public GenericError(string reason);

       public GenericError(string reason, System.Exception ex__);

       // GetHashCode and comparison methods defined here,

         // as well as mapping-internal methods.

    }

    public class BadTimeVal : M.GenericError

    {

         public BadTimeVal();

         public BadTimeVal(System.Exception ex__);

         public BadTimeVal(string reason);

         public BadTimeVal(string reason, System.Exception ex__);

                // GetHashCode and comparison methods defined here,

                // as well as mapping-internal methods.

    }

    public class BadZoneName : M.GenericError

    {

           public BadZoneName();

           public BadZoneName(System.Exception ex__);

           public BadZoneName(string reason);

           public BadZoneName(string reason, System.Exception ex__);

           // GetHashCode and comparison methods defined here,

           // as well as mapping-internal methods.

    }

    每个Slice异常都会映射到一个同名的C#异常类。对于每个异常成员,对应的类都会包含一个 public 数据成员 (显然,因为 BadTimeVal BadZone-Name 没有成员,为这两个异常生成的类也没有成员)。

    在生成的类中, Slice异常的继承结构得到了保持,所以BadTimeVal BadZoneName 都是从GenericError继承的。

    所有用户异常都派生自基类 Ice.UserException。所以针对Ice.UserException 安装一个处理器,你可以捕捉所有用户异常;同样,针对Ice.LocalExceptionIce.Exception安装处理器,你就可以捕获所有Ice运行时异常或Ice异常。

    如果一个异常(或异常的一个基类)包含数据成员,那么用Slice2Cs生成的类便多了两个构造方法,这些新增的构造方法允许你在声明异常类的时候初始化数据成员,以减少代码的行数。

        所有生成的异常类都提供了GetHashCodeEquals ==比较、!=比较的实现。另外,生成的异常类还提供了一些其它的方法,但那些方法是供 Java 映射内部使用的,应用代码不应该调用它们。

  • 相关阅读:
    mac c++编译出现segmentation fault :11错误
    ssh 连接缓慢解决方法
    237. Delete Node in a Linked List
    203. Remove Linked List Elements
    Inversion of Control Containers and the Dependency Injection pattern
    82. Remove Duplicates from Sorted List II
    83. Remove Duplicates from Sorted List
    SxsTrace
    使用CCleaner卸载chrome
    decimal and double ToString problem
  • 原文地址:https://www.cnblogs.com/zhangronghua/p/1197064.html
Copyright © 2011-2022 走看看