在C#语言中,符合公共语言规范(CLS)的数据类型可以分为两类:值类型和引用类型。两者存在很大的区别,值类型表示的是实际数据,只是将值存放在内存中。值类型都存储在栈中。而引用类型数据都存储在堆中。
1、值类型
(1)整形
(2)字符型
在C#中,字符类型(char)采用了Unicode字符集,一个Unicode的标准字符长度为16位(两字节)。
(3)浮点型
C#提供了三种师叔类型:单精度类型(float)、双精度类型(double)和十进制小数类型(decimal)。
系统默认的浮点数为double型,要声明float和decimal类型还需要在小数后面加上后缀F和M,如:2(代表system.double);2F(代表system.single);2M(代表system.decimal)。
(4)布尔型
C#中的bool类型对应于system.Boolean结构。可能的取值为True和False,占用内存长度为1字节/8位。(*不再有和其他数值的对应关系,不能认为0是FALSE,其他值是TRUE)
(5)枚举类型
枚举类型是一种复合值类型,主要用于表示一组逻辑上相关联的项的组合,由关键字enmu来定义。
enmu Fruit {apple,banana,pear,peach};
Fruit f1;
f1=Fruit.banana
(6)结构类型
结构体struct类是用户自定义的值类型数据类型。把一系列相关的信息组织成一个单一实体的过程,就是创建一个结构的过程。
struct person
{
string m_name; //姓名
int m_age; //年龄
string m_sex; //性别
}
2、引用类型
引用类型包括类(class)、接口(interface)、委托(delegate)和数组(array)。
(1)类(class)
类是一组具有相同数据结构和相同操作的对象集合。创建类的实例必须使用关键字new来进行声明。
类和结构之间的根本区别在于:结构是值类型,而类是引用类型。对于值类型,每个变量直接包含自身的所有数据,每创建一个变量,就在内存中开辟一块区域;而对于引用类型,每个变量只存储对目标存储数据的引用,每创建一个变量,就增加一个指向目标数据的指针。
(2)接口(interface)
应用程序之间要相互调用,就必须事先达成一个协议,被调用的一方在协议中对自己所能提供的服务进行描述。在C#中,这个协议就是接口。接口定义中对方法的声明,既不包括访问限制修饰符,也不包括方法的执行代码。(*如果某个类继承了一个接口,那么它就要实现该接口所定义的服务。也就是实现接口中的方法。)
(3)委托(delegate)
委托用语封装某个方法的调用过程。
委托的使用过程分为3步:
1.定义 delegate void HelloDelegate();
2.实例化 HelloDelegate hd = new HelloDelegate(p1.Say); //p1.Say调用的方法
3.调用 hd();
(4)数组(array)
数组主要用于同一数据类型的数据进行批量处理。在C#中,数组需要初始化之后才能使用。
如:int[] array1 = new int[3]{2,3,5};
int[] array1 = {2,3,5};
在数组中,最常用的一个属性是Length,他表示数组的长度。
关于引用类型的具体内容和使用方法,会在以后的博客中具体介绍。