• 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

  • 相关阅读:
    数据库中的 索引
    JQuery中ajax请求
    如何优化广告,提高点击率
    常用的正则表达式
    全栈工程师之路中级篇之小程序开发前言
    ionic入门教程第四课使用$controllerProvider按需加载controller
    全栈工程师之路中级篇之小程序开发第一章第一节注册小程序
    ionic入门教程第三课在项目中使用requirejs分离controller文件和server文件
    ionic入门教程第五课举例子说明异步回调$q及$q在项目中的用法
    求两个整数的最大公约数和最小公倍数
  • 原文地址:https://www.cnblogs.com/zhangronghua/p/1195511.html
Copyright © 2020-2023  润新知