深入c#数据类型

数据类型按存储方式可分为两类:值类型和引用类型.

1值类型

值类型源于System.ValueType家族,每个值类型的对象都有一个独立的内存区域用于保存自己的值,

值类型数据所在的内存区域成为栈(Stack),只要代码中修改它,就会在它的区域内保存这个值,值类型主要包括基本数据类型和枚举类型等.

对于值类型,不同的变量会分配不同的存储空间,并且存储空间中存储的是该变量的值,赋值操作传递的是变量的值,改变一个变量的值不会影响另一个变量的值.

2.引用类型

引用类型源于System.Object家族,在C#中引用类型主要包括数组,类和接口等.

对于引用类型,赋值是把原对象的引用传递给另一个引用,对数组而言,当一个数组引用赋值给另一个数组引用后,这两个引用指向同一个数组,也就是指向同一块

存储空间.

细分值类型和引用类型

值类型:1. 基本数据类型 2.枚举类型 3.结构类型

引用类型: 1.类 2.接口 3.数组

结构

1.结构的定义

访问修饰符 struct 结构名

{

//结构体

}

结构的定义有以下特点:

1.结构中可以有字段,也可以有方法

2.定义时,结构中的字段不能被赋初值

结构的使用

1.可以不用new

2.声明结构的对象后,必须给结构的成员赋初值.

装箱和拆箱

1 int i = 123;
2 object o = i;      //装箱:值类型转换为引用类型
3 int j=(int)o;     //拆箱:引用类型转换为值类型

不同类型的参数传递

1.怎样区分是值传递还是引用传递?

判断依据是有没有ref.

2.使用值方式(不用ref修饰)传递值类型参数时,参数在方法中的修改不会保留.

使用值方式(不用ref修饰)传递引用类型参数时,参数在方法中的修改会保留

使用引用方式(用ref修饰)传递值类型或引用类型参数时,参数在方法中的修改都会保留