【IT168技术文档】
下图显示了异常的继承关系:

下图显示了异常的继承关系:
图中所有的异常都继承自System.ApplicationException异常类,Ice.Exception是 System.ApplicationException的子类,而分别用来表示ice run time异常和用户异常的Ice.LocalException、Ice.UserException类则是Ice.Exception类的子类。
Ice.Exception类的构造函数如下:
每一个继承自Ice.Exception的类都要实现这两个构造函数。第二个构造函数需要一个参数,构造函数用这个参数来初始化继承自 ApplicationException类的InnerException属性的值;上面所说的两个构造函数都会将Message属性设为 String.Empty。public abstract class Exception : System.ApplicationException { public Exception(); public Exception(System.Exception ex); }
下面是一些Slice异常的定义:
上面这些定义用Slice2C#生成的代码如下:exception GenericError { string reason; }; exception BadTimeVal extends GenericError {}; exception BadZoneName extends GenericError {};
每个Slice异常都会映射到一个同名的C#异常类。对于每个异常成员,对应的类都会包含一个 public 数据成员 (显然,因为 BadTimeVal 和 BadZone-Name 没有成员,为这两个异常生成的类也没有成员)。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异常的继承结构得到了保持,所以BadTimeVal和 BadZoneName 都是从GenericError继承的。
所有用户异常都派生自基类 Ice.UserException。所以针对Ice.UserException 安装一个处理器,你可以捕捉所有用户异常;同样,针对Ice.LocalException或Ice.Exception安装处理器,你就可以捕获所有Ice运行时异常或Ice异常。
如果一个异常(或异常的一个基类)包含数据成员,那么用Slice2Cs生成的类便多了两个构造方法,这些新增的构造方法允许你在声明异常类的时候初始化数据成员,以减少代码的行数。
所有生成的异常类都提供了GetHashCode、Equals、 ==比较、!=比较的实现。另外,生成的异常类还提供了一些其它的方法,但那些方法是供 Java 映射内部使用的,应用代码不应该调用它们。