Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103121198
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: C/C++

2008-04-15 21:26:00

    来源:赛迪论坛    作者:sixth

单一的根基类为运行时类型查询和代码生成(通常被称为反射)提供了支持机制 [ 译注 2] ,这是 ISO-C++ 所缺乏的。我们将在今后一系列文章中详细讨论它们给 CLI 带来的动态编程特性。

  除此之外, CLI 还支持一种被称作特性元数据( attribute metadata )的构造,它允许我们定义一些特性类,然后将其关联在 CLI 类型和当前正在运行的程序构造上——这有效地扩展了内建于 CLI 中的类型和程序构造。这些用户定义的特性也可以通过反射机制来获得,应用程序则可以根据它们的值来进行条件逻辑判断。这也是 C++/CLI 为 C++ 带来的动态组件编程的一部分。再次强调一遍,类型反射和特性将在我们的专栏中得到深入的讨论。

  那么,对于大家来说怎样学习 C++/CLI 呢?学习 C++/CLI 的其中一个要点便是学习底层的通用类型系统( CTS ),它包括以下三种类型:

  1. 多态引用类型,其用于所有的类继承。我们将在早期的一些专栏文章中讨论它们。

  2. 非多态值类型,其用于实现一些类似于数值类型那样的、对运行时效率要求比较高的类型。我们将其放在引用类型之后讨论。

  3. 抽象接口类型,其用于定义一组供引用类型或者值类型实现的操作。接口为多继承提供了一种别样的设计模式。我们也将有一系列专栏文章来讨论它们。

  将 CTS 映射为一组语言内置类型对于所有的 CLI 语言都适用,虽然各种语言所使用的语法各不相同。这也是一门 CLI 语言所要面对的第一个设计层面。例如,在 C# 中,我们可以用以下代码来定义一个抽象基类型 Shape (一些具体的几何对象将继承自它)。

  public abstract class Shape {…}

  而在 C++/CLI 中,我们用下面的代码来定义同样的类型。

  public ref class Shape abstract {…};

  除了语法差异之外,两种声明的实际表示完全相同。类似地,在 C# 中,我们可以用下面的代码来定义一个具体类 Point2D 。

  public struct Point2D {…}

  而在 C++/CLI 中,我们用下面的代码来定义同样的类型。

  public value class Point2D {…};

  我们对语法的选择基于如下的出发点:以一种直观的设计视角将 CLI 类型和 ISO-C++ 类型紧密地集成在一起。

  因此,简单地说一种语言比另一种语言更接近底层 CLI 并不正确。相反,每一门 CLI 语言都只是表达了自己对底层 CLI 对象模型的一种视图。

阅读(301) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~