购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 值类型

C#中值类型实例通常分配在线程的堆栈上,并且不包含任何指向实例数据的指针,因为变量本身就包含了其实例数据。在托管代码中,类型决定了类型实例的分配位置,而使用类型的开发人员对此没有控制权。值类型实例不受垃圾收集器的控制。

3.3.1 值类型内存分配

值类型主要包括简单类型、结构体类型和枚举类型等。通常声明为以下类型:int、char、float、long、bool、double、struct、enum、short、byte、decimal、sbyte、uint、ulong、ushort等时,该变量即为值类型。C#中的主要值类型如表3-1所示。

表3-1 值类型表

需要说明,C#的所有值类型均隐式派生自System.ValueType,每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。例如:

【实例3-3】 本例将创建一个控制台应用程序,实现值类型的操作。

(1)创建控制台应用程序。

启动Visual Studio 2010,选择“文件”→“新建”菜单命令,在“项目”选项卡中选择“控制台应用程序”,创建一个名称为“3.3”的控制台应用程序。

(2)编写值类型操作其本身的代码,代码如下:

【代码解析】 第9行声明值类型变量MyValue。第12~20行静态函数ReturnValue()返回int值。第14行实例化MyInt类,并为该类的MyValue赋值。

【运行效果】 代码编写完成之后,按“F5”键或者单击工具栏中的“启动调试”按钮,显示结果如图3-5所示。

图3-5 运行结果

3.3.2 值类型赋值

值类型包括数值类型、枚举和结构,它们都分配在栈上,一旦离开定义的作用域,立即就会被从内存中删除。当一个值类型赋值给另一个值类型的时候,默认情况下完成的是一个成员到另一个成员的复制。就数值和布尔型而言,唯一要复制的就是变量本身的值。

值类型赋值的时候,是复制各个值到赋值目标,实际上各自在栈中都有存在,对一个值的操作不会影响另一个。

【实例3-4】 本例将创建一个控制台应用程序,来说明值类型赋值的时候,是复制各个值到赋值目标,实际上各自在栈中都有存在,对一个值的操作不会影响另一个。

(1)创建控制台应用程序。

启动Visual Studio 2010,选择“文件”→“新建”菜单命令,在“项目”选项卡中选择“控制台应用程序”,创建一个名称为“3.4”的控制台应用程序。

(2)代码如下所示:

【代码解析】 第4行为结构MyPoint定义两个变量,供后面调用。

【运行效果】 代码编写完成之后,按“F5”键或者单击工具栏中的“启动调试”按钮,显示结果如图3-6所示。

图3-6 运行效果 LPUYpMUJcM+MewiRw87JHLDvLV3AW/C0Nju6qHxAEoMpmPDBGzzi7BQJ97zR3ec1

点击中间区域
呼出菜单
上一章
目录
下一章
×