C /CLI实战——HELLO

2008-02-23 05:35:28来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  什么是C /CLI?

  C /CLI描绘的是一种多元组合,此处的 C 当然是指 Bjarne Stroustrup 在 Bell 实验室发明的C 编程语言。他支持速度和执行 文档的大小都得到优化的静态对象模型。但除了堆内存分配以外,他不支持运行时程式对对象的更改。他允许对底层机器进行无限制的访问,但对于正在运行的程式中的活动类型、连同相关的程式基础构造,他的访问能力却很有限、或根本就不可能。我在微软的同事 Herb Sutter,也是C /CLI的主架构师,认为C 是个混凝土语言。

  “CLI”即公共语言基础结构(Common Language Infrastructure),这是个支持动态组件编程模型的多层架构。在许多方面,他所表示的对象模型和C 的完全相反。他是个运行时软件层 ,一个虚拟执行系统,运行在应用程式和底层操作系统之间。对底层机器的访问受到相当严格的限制。支持对运行中程式的活动类型连同关联程式的基础构造 进行存取——发现和建构。斜线“/”表示 C 和 CLI 之间的一种绑定(binding),有关这种绑定的细节构成本专栏的常规主题。

  所以,对于“什么是C /CLI?”这个问题第一个最近似的答案是:他是静态C 对象模型到动态CLI组件对象模型的一种绑定, 简言之,他就是您如何用C 进行.NET编程,而不是用C#或Visual Basic.NET。象C#和CLI自己相同,C /CLI正在经历 ECMA(欧洲电脑制造商协会) 标准化并最终要经历ISO标准认证。

  公共语言运行时(CLR)是微软版的CLI,专门用于 Windows 操作系统,同样,Visual C 2005是C /CLI 的实现。

  第二个近似答案是:我觉得C /CLI在C 内集成.NET编程模型和以前贝尔实验室在当时的C 中用模板集成泛型编程相同有异曲同工之处。两种情况中,您在现有C 代码库上的投资连同您现有的C 专业技术都得到保护。这是C /CLI设计的一个基本 需要。

  学习C /CLI

  一种C /CLI语言的设计有三个层面,这三个层面也适用于任何语言:语言层语法到公共类型系统(CTS) 的映射;选择为程式员直接操作而公开的底层CLI基本组织结构 的周详程度;连同选择要提供的超越CLI直接支持的附加功能。

  第一个层面是任何CLI语言在很大程度上都共有的,第二个层面和第三层面是某一CLI语言区别于其他语言的地方。根据所要解决的问题,您能够选择某一 种语言,也能够将多种CLI语言结合起来。学习C /CLI语言需要掌控这三个设计层面。

  怎样将C /CLI 映射到CTS?

  了解底层CTS 对学习C /CLI很有帮助,他主要包括三个常规类类型:

  多态引用类型,其用于任何的类继承;

  非多态值类型,其用于实现需要运行时效率的具体类型,如数字类型;

  抽象接口类型,其用于定义一个实现该接口的一组引用类型或值类型一起使用的公共操作集;

  在设计方面,虽然CTS到一组内置的语言类型的映射对于任何CLI语言来说都是一起的,当然,每一种CLI语言的语法各不相同。例如,在C#中,我们能够 这样来定义一个抽象基类 Shape,从这个类派生特定的几何模型对象。

abstract class Shape { ... } // C#

  而在C /CLI中,能够象下面这样写,以表示完全相同的底层引用类型:

ref class Shape abstract { ... }; // C /CLI

  在底层 IL(中间语言)中,以上两种声明以完全相同的方式表示。同样,在C#中,我们能够用下面的代码来定义一个具体的 Point2D 类 :

struct Point2D { ... } // C#

  而在C /CLI中写成:

value class Point2D { ... }; // C /CLI

  借助 C /CLI 支持的类类型家族表现了一种本机方式的 CTS 集成。他确定了您的语法选择,例如:

class native {};
value class V {};
ref class R {};
interface class I {};

  CTS 也支持枚举类类型,其行为方式和本机枚举稍微有些区别,C /CLI对二者都提供支持:

enum native { fail, pass };
enum class CLIEnum : char { fail, pass};

  同样,CTS支持其自己的数组类型,其行为也和本机数组类型有一定差别,微软同样对二者提供支持:

int native[] = { 1,1,2,3,5,8 };
array<int>^ managed = { 1,1,2,3,5,8 };


  那种认为任何一种 CLI 语言比另一种语言更接近或几乎就是到底层CLI的映射是不精确的。相反,每一种CLI语言都只是表达了自己对底层CLI对象模型的一种 见解。在下一节您将更清楚地看到这一点。

  CLI 的细节标准

  在设计CLI语言时必须考虑的第二个设计层面是要将什么程度的底层CLI实现模型结合到该语言中。这个语言解决什么样的问题?要解决这些问题必须要什么样的工具? 此外,该语言很可能吸引哪一类程式员?

  下面,我们利用发生在托管堆中的值类型问题。在许多情况下,值类型能够在托管堆中找到自己:

  通过隐式的框入/框出操作(boxing)——当值类型的某个实例被赋值给一对象时,或通过某个未被改写的值类型调用一个虚拟方法时;

  当值类型被当作为引用类类型的成员时;

  当值类型被当作CLI数组元素存储时;

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 重载、覆盖和隐藏 之细谈

下一篇: C /CLI基本数据类型探索