科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Stan Lippman:C++/CLI全景体验 (2)

Stan Lippman:C++/CLI全景体验 (2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

C++/CLI全景体验

作者:sixth 来源:赛迪论坛 2007年10月28日

关键字: 体验 CLI C++ Linux

  • 评论
  • 分享微博
  • 分享邮件

单一的根基类为运行时类型查询和代码生成(通常被称为反射)提供了支持机制 [ 译注 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 对象模型的一种视图。

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章