- 1、本文档共124页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
托管C程序设计的
第9章 托管C++程序设计 托管C++能够充分应用.NET Framework提供的功能,并能允许用C++编写的模块与其它语言(如C#、Visual Basic等)编写的模块组合。 本章主要介绍托管C++程序设计的基础知识,包括CLR、托管程序、垃圾回收、托管数据类型、程序集、托管类、托管继承、接口、抽象类、托管引用类型和值类型、委托和事件等概念和技术。这些内容是Windows程序设计的基础,也是.NET环境中C#、Visual Basic等语言中的通用编程概念和技术。 9.1 CLR与托管程序 1、CLR与托管程序 CLR即公共语言运行库,它为.NET中的每种编程语言提供了一个共同的程序执行环境。 在 CLR 中运行的代码称为托管代码,不在CLR中运行的代码称为非托管代码。 9.1 CLR与托管程序 2、NET托管与非托管程序的关系 9.1 CLR与托管程序 2、CTS与元数据 CTS即公共类型系统,其主要作用: 定义了一套供所有.NET编程语言共用的.NET数据类型,以及这些类型的内部格式。这些类型中的大多数都符合CLS规范,可在多种托管语言中共用,实现语言的互操作性。 建立一个支持跨语言集成、类型安全和高性能代码执行的框架。 提供一个支持完整实现多种编程语言的面向对象的模型。 定义各语言必须遵守的规则,有助于确保用不同语言编写的对象能够交互作用 9.1 CLR与托管程序 3、元数据 元数据用于描述CLR在 JIT 编译MSIL、加载类、执行代码以及与本机领域进行交互时使用的运行库类型(类、接口和值类型)、字段、方法以及内部实现和布局信息。 元数据包括在每个 CLR 组件中,并可供CLR、工具和服务使用。它通过定义统一的存储和检索类型信息的机制使语言互操作性成为可能。 9.1 CLR与托管程序 4、CLS 即公共语言规范,是CTS的子集,所有适用于CTS的规则都适用于CLS,它描述了一组基本的语言功能,并定义了程序语言间互操作的规则,保障多语言互操作的实现。 CLS是微软公司定义的所有基于.NET Framework语言必须支持的最小功能集。包括:变量的命名规则,定义了基本数据类型如Int32、Int64、Single、Double、Boolean等,禁止无符数值数据类型,指定了函数列表的规范,事件名和事件参数的定义和传递规范,禁止内存指针和函数指针等内容。 9.1 CLR与托管程序 5.MSIL Microsoft Intermediate Language Microsoft,中间语言 . MSIL是CLR提供的一组可以有效地转换为本机代码且独立于 CPU 的指令,要使代码可运行,还必须先将 MSIL 转换为特定于 CPU 的代码 6.JIT编译 CLR编译.NET程序时,会首先把它编译成MSIL代码。在该程序被执行时,那些被调用的函数代码会被CLR从MSIL代码编译成本机代码(即机器指令代码)执行,这种编译方式称为JIT(Just-in-time )编译。 9.1 CLR与托管程序 7.垃圾回收 在托管程序中,堆空间由CLR管理,称为托管堆。 托管堆由程序员用gcnew分配,如同C++中的new一样,但托管堆不需要程序员用free之类的命令回收。 当内存不足时,CLR就会自动搜查托管堆中那些没有指针指向或被未被引用的对象(因其无用,徒占内存空间,故称之为垃圾),并释放它们,将它们所占据的内存空间归还系统,以被其它程序使用。这种方法称为垃圾回收,即GC(Garbage Collection)。 9.1 CLR与托管程序 8、托管程序的执行过程 9.2 托管数据类型 1、托管数据类型的概念和概况 .NET Framework的CTS定义了一些类型,如Int16,Double,Char等,其中的许多满足CLS规范,可用于.NET环境中的托管C++、C#、Visual Basic程序设计,称为托管数据类型。 9.2 托管数据类型 2.值类型 .NET 也提供了许多类似于C++中的int、char、double的类型,如Int32、Char、Double等,这些类型在它自己的内存分配单元中存储数据,称为值类型。 每个值类型变量都有自己的数据副本,在作为参数传递给函数时,值类型会将其值拷贝给参数变量,因此对一个值类型变量的操作不会影响其他值类型变量。 值类型比C语言中的int、char等内置类型功能更强大,它是一种类,所有的值类型都隐式派生于 ValueType类,能够重载ValueType中的功能。 9.2 托管数据类型 .NET中的值类型具有如下特殊性: 值类型没有与存储类的对象相关的系统开销,并且它们不需要构造函数。 值类型是密封的,它们不能够被继承。 所有的值类型都默认从System
文档评论(0)