n,ataRow,DataSet,System.Data 包含基础数据库管理类型库 ataTable,DataSource 9.3托管C语言基础1托管类型 托管C语言与传统的C语言相比,语法上没有多大的变 化,但是在数据类型上有了很大的改变,对于托管C语言 我们首先要学习托管数据类型。
C语言可以包含托管类型 和非托管类型。
托管类型是一种数据类型,该数据类型在托 管堆上实例化(一般使用new 操作符),从不会在非托管堆 或者栈上创建。
托管类型是一种可以被CLR自动垃圾回收的 类型,不需要用delete操作符来释放对象,此类对象不能直 接删除。
非托管类型是一种为垃圾回收器所忽略的数据类 型,程序员需要用delete操作符来释放非托管类型的对象所 占用的内存。
托管C类型总体上分为值类型和引用类型。
值类型又分为 内置值类型(如整数类型、浮点类型)、用户定义值类型、 枚举类型;引用类型又分为自描述类型、指针类型和接口类 型。
9.3托管C语言基础2.值类型 大多数编程语言提供内置的数据类型(比如整数和浮点 数),这些数据类型会在作为参数传递时被复制(即它们通 过值来传递)。
在 .NET 框架中,这些称为值类型。
运行库 支持两种值类型:内置值类型和用户定义的值类型。
(1)内置值类型 .NET 框架定义了内置值类型(如 System.Int32 和 System.Boolean),它们对应于编程语言使用的基元数据类 型并与之相同。
表9. 2列出了 .NET 框架支持的一些值类 型,简要描述了每个类型,并指示C 托管扩展中的相应类 型。
表中还包括 Object 和 String 类的项,这些项在许多语 言中都有相应的关键字。
9.3托管C语言基础(2)自定义值类型 值类型和垃圾收集类不同,前者可以在运行时堆栈上分配并 且在特定条件下可以被当作静态变量或堆分配变量。
值类可 以在类或结构声明之前添加_value关键字。
值类的定义方式 如下: _value class_spcifier 或者 _value struct_specifier 例如,下面的代码定义了两个值类: _value class myClassA … 9.3托管C语言基础3.垃圾回收类 垃圾回收类又称为引用类型,前面我们已经提到了“垃圾收 集”,对于程序员来讲,垃圾收集类为我们提供了几方面的 功能:其一是,在垃圾收集堆上创建对象的速度比传统的 Win32堆上快;其二是,在垃圾收集堆上创建的对象可以被 系统自动回收,不必对资源进行人工释放。
垃圾收集类的定 义方法是使用__gc关键字,使用格式如下: __gc class_specifier __gc struct_specifier __gc interface_specifier 9.3托管C语言基础(1)接口类型 在托管的C中,接口类型体现了托管的优点,定义托管的 关键字为__interface,如果定义一个托管的C接口,在 __interface前面还需加上__gc关键字。
下面是定义一个托管 接口的代码: //定义一个托管的C类接口 __gc__interface Imyinterface void Method1() 9.3托管C语言基础(2)指针类型 指针是特殊类型的变量。
运行库支持三种指针:托管指针、 非托管指针和非托管函数指针。
托管指针(也称为 __gc 指针)是托管应用程序使用的一种 新型指针。
托管指针指向公共语言运行库堆的托管内存块。
此堆上执行自动垃圾回收。
托管指针是为通过引用传递的方 法参数而产生的。
某些语言提供了产生托管指针的其它方 式。
只有托管指针才符合 CLS。
不需要显式定义指针类型。
在声明指针时,就确定了指针类 型所需的所有信息。
当指针类型为引用类型时,指针类型的 值不是对象,而且无法从这样的值确定准确的类型。
9.3托管C语言基础(3)数组类型 数组类型是通过指定数组的元素类型、数组的秩(维数)和 数组每个维度的上限和下限来定义的。
尽管它们可能是在动 态(而非静态)提供时标记的,但所有这些都包含在数组类 型的任何签名中。
精确的数组类型是在需要时由运行库自动 创建的,不需要单独定义数组类型。
给定类型的数组只能保 存该类型的元素。
数组类型的值是对象。
数组对象定义为存储数组元素类型的 值的一系列位置。
重复值的数量由数组的秩和边界来确定。
数组类型从类型 System.Array 继承而来。
此类表示所有的 数组,不论它们的元素类型或它们的秩如何。
对数组定义的 操作有:根据大小和下限信息分配数组;编制数组索引以读 取或写入值;计算数组元素的地址(托管指针);以及查询 秩、边界和数组中存储的值的总数。
上一篇:
如何设计数据库
下一篇:
系统中主要发电机的电力系统稳定器