C#编程自学之数据类型和变量二

2019-12-26 13:35:01于丽

这篇文章继续介绍了C#数据类型和变量,是对上一篇文章的补充,希望对大家的学习有所帮助。

我们继续自学C#编程教程,在上一课中介绍了C#的基本数据类型以及变量,今天这一节课我们来介绍值类型与引用类型!

一、什么是值类型与引用类型?

C#与大多数面向对象语言数据类型一样,分为值类型与引用类型两种?如何区分这两种类型?如图:

C#编程自学之数据类型和变量二

根据类型结构图我们得出:

1.值类型包括 内置数据类型如(int double float) 用户自定义值类型(struct 结构体) 枚举(emun)

2.引用类型包括 接口类型 类类型等等。

知道了那些类型属于值类型与那些类型属于引用类型之后,我们来分析一下值类型与引用类型的区别分别是什么?

首先继续看图:

C#编程自学之数据类型和变量二

根据上图我们可以看出,我们计算机内存可以分为堆(.NET中是托管堆)和栈两个区域!理解了这个后我们来看值类型和引用类型的区别:

1.值类型:值类型如 int double float 等这些基础数据类型,实际的值都是分配在栈上!

2.引用类型: 引用类型如 object 等这些数据类型,实际的值都是分配在堆上,并且在栈上保存一个堆上存放值的地址。

如上图 代码:

//在栈上分配一个空间 存放10

int a = 10;

//在堆上分配一个空间存放变量a的值10,在栈上分配一个空间存放该值在堆中的地址

object o = a;

好的了解基本值类型与引用类型的概念后我们来深入分析他们的本质。

二、值类型与引用类型剖析

1.值类型

值类型是分配在栈中,根据栈的原理,值类型一旦离开当前程序的作用域就会被立刻销毁!那么我定义两个相同的值类型会怎么样呢?看如下代码:

static void main()

{

//此时在栈中分配一块空间存放10

int a = 10;

//在栈中继续分配一块空间存放a的值 10

int b = a;

//修改b所存放的空间中的10为20

//此时不影响a 因为他们两个各自有独立的空间

b = 20;

//打印 a 和 b 的值

Console.WriteLine(" a = {0}",a.ToString());

Console.WriteLine(" b = {0}",b.ToString());

} //作用域结束 销毁a 和 b 所分配的地址空间