标识符的映射
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 |