• 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 映射内部使用的,应用代码不应该调用它们。

  • 相关阅读:
    leetCode
    Autorelease Pool
    YYKit源码阅读
    读AVFoundation官方文档记录
    leetCode
    LeetCode
    图像灰度值 灰度值与像素值的关系
    CycloneII特殊管脚的使用(转)
    MOS管正确选择的步骤
    运算放大器单电源应用中的使用齐纳二极管偏置方法
  • 原文地址:https://www.cnblogs.com/zhangronghua/p/1197064.html
Copyright © 2020-2023  润新知