ICE框架之Slice2CSharp映射---标识符、模块、内置类型的映射

标识符的映射

Slice 标识符映射到相同的C# 标识符。例如, Slice 标识符Clock会变 成C# 标识符 Clock。这条规则有一个例外:如果一个Slice 标识符与某个C# 关键字是一样的,对应的C# 标识符的前面就会加上一个@。 例如, Slice 标识符while 会被映射成@while。

Slice2CS生成的类要继承.NET Framework的接口或基类,而这些接口或类都有一些方法派生给它们的子类,所以我们要避免定义和那些方法冲突的Slice标识符,如果我们定义了和那些方法冲突的标识符,则我们定义的Slice标识符在Slice2CS生成的类中会自动加上ice_前缀和_后缀。例如,如果我们定义了一个Clone标识符,而这个标识符又有冲突的话,那么在Slice2CS生成的类中,它将变成ice_Clone_。会引起冲突的标识符列表如下:

     Clone Equals       Finalize   GetBaseException     GetHashCode       GetObjectData         GetType       MemberwiseClone      ReferenceEquals      ToString      checkedCast    uncheckedCast

请注意,上面所说的转换都不是每次都执行的,它只有在需要的时候才执行。例如,在C#中structure是不继承自ICloneable接口的,所以如果一个Slice Structure包含了一个叫Clone的成员,则用Slice2CS生成的类中这个成员仍叫Clone,并不进行转换;但是C#中class是继承自ICloneable接口的,所以如果一个Slice class包含一个标识符为Clone的成员,那么在Slice2CS生成的类中,这个成员的标识符会变成ice_Clone_。

    另外需要注意的一点是,Slice标识符是不区分大小写的,所以Clone或clone都会被转换成ice_Clone_ 或ice_clone_(当然只是在Slice2CS生成的类或其类库已Clone这个标识符的时候)。

模块的映射

Slice 模块映射到 C# 命名空间,名字保持不变。映射会保持Slice 定义的嵌套层次。例如:

module M1 {

     module M2 {

      };

};

module M1 {  

};

这个定义映射到对应的C# 定义:

Namespace M1

{

    Namespace

    {

    }

}

Namespace M1

{

}

Ice 命名空间

为了避免与其他库或应用的定义发生冲突,Ice run time 的所有 API 都放在Ice命名空间 中。 Ice命名空间的有些内容是根据 Slice 定义生成的;其他一些部分提供的是一些专用的定义。

内建类型的映射 

Slice内建类型映射到C# 的一些类型如下表:

Slice类型

C#类型

Bool

Bool

Byte

Byte

Short

short

Int

Int

Long

Long

Float

Float

Double

Double

String

string

原文地址:https://www.cnblogs.com/zhangronghua/p/1195511.html