ICE框架之Slice2CSharp映射---异常的映射

摘要:
下面是一些Slice异常的定义:exceptionGenericError{stringreason;};exceptionBadTimeValextendsGenericError{};exceptionBadZoneNameextendsGenericError{};上面这些定义用Slice2C#生成的代码如下:publicclassGenericError:Ice.UserException{publicstringreason;publicGenericError();publicGenericError;publicGenericError;publicGenericError;//GetHashCodeandcomparisonmethodsdefinedhere,//aswellasmapping-internalmethods.}publicclassBadTimeVal:M.GenericError{publicBadTimeVal();publicBadTimeVal;publicBadTimeVal;publicBadTimeVal;//GetHashCodeandcomparisonmethodsdefinedhere,//aswellasmapping-internalmethods.}publicclassBadZoneName:M.GenericError{publicBadZoneName();publicBadZoneName;publicBadZoneName;publicBadZoneName;//GetHashCodeandcomparisonmethodsdefinedhere,//aswellasmapping-internalmethods.}每个Slice异常都会映射到一个同名的C#异常类。对于每个异常成员,对应的类都会包含一个public数据成员。在生成的类中,Slice异常的继承结构得到了保持,所以BadTimeVal和BadZoneName都是从GenericError继承的。所有用户异常都派生自基类Ice.UserException。如果一个异常包含数据成员,那么用Slice2Cs生成的类便多了两个构造方法,这些新增的构造方法允许你在声明异常类的时候初始化数据成员,以减少代码的行数。

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

ICE框架之Slice2CSharp映射---异常的映射第1张

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

图中所有的异常都继承自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 映射内部使用的,应用代码不应该调用它们。

免责声明:文章转载自《ICE框架之Slice2CSharp映射---异常的映射》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue常用插件之打印功能、二维码插件、批量打印二维码nginx反向代理转发apache配置 之 cookie去哪儿了?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

分布式RPC框架ZeroC Ice简介

开发分布式或较大型的软件时,必不可少的要进行系统间通信,目前比较常用的框架有Http RestFul,Thrift,gRPC等等,今天分享的ZeroC Ice也是其中一员。 ZeroC公司出品的Ice(Internet Communication Engine)框架专注于RPC通信,经过了10多年的发展,已经非常的成熟,它的主要优点是高性能,跨语言,跨平台...

ICE3.7.3集群安装与部署

ICE3.7.3集群安装与部署前言: 本文ice3.7.3基于ubuntu16.04版安装,如果版本不一致可能造成离线安装包缺少依赖或者依赖版本过低或过高的问题,需要重新下载安装包。本安装包包含openjdk_1.8.0_242无需自己下载安装。 准备五台ubuntu16.04(三台也可以)icegrid-master、icegrid-slave、node...

vue中获取客户端IP地址

vue中获取客户端IP地址 获取ip方法 export functiongetUserIP(onNewIP) { let MyPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection ||window.webkitRTCPeerConnection; let...

Ice框架简介及Vs2013安装Ice 3.7.0步骤及实例

ICE是什么? ICE是ZEROC官网的开源通信协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通信引擎,是一个面向对象的中间件,支持C++、Java、C#、VB、Python等,客户和服务器可以用不同的语言,可以运行在不同的操作系统和机器架构上,支持TCP/UDP。使我们能够以最小的代价构建分...