4.2 数据类型
在.NET中,任何类型都是“类”。
C#支持的数据类型包括两大类:值类型和引用类型。值类型通常被分配在堆栈上,它的变量直接包含变量的实例,使用的效率比较高。引用类型总是分配在托管堆上,引用类型的变量通常仅包含一个指向实例的指针,系统通过该指针来引用其实例。
值类型包括整数类型、布尔类型、实数类型、字符类型、结构类型和枚举类型等;引用类型包括类和数组等。
4.2.1 值类型
1.整数类型
C#中有多种整数类型,见表4-1。
表4-1 C#中的整数类型
2.布尔类型
布尔(bool)类型用来表示“真”和“假”这两个概念,分别用true和false两个值表示。可将布尔值赋给bool变量,也可以将bool表达式赋给bool变量。在C和C++中用0表示假,其他任何非0的值都表示真,这种情况在C#中已经被彻底改变。下面是一个使用布尔型变量的例子。
运行结果为:
3.实数类型
C#中的实数类型见表4-2。
表4-2 C#中的实数类型
4.字符类型
C#支持的字符类型采用Unicode字符集,一个Unicode标准字符的长度为16位,范围为U+0000到U+ffff,用它可以表示世界上大多数语言。下面例子说明了一个字符型变量。
C#也支持转义字符的使用,转义字符的规定与C语言基本相同。
5.结构类型
与C和C++相同,C#也可以用struct来说明结构类型。
6.枚举类型
与C和C++相同,C#也可以用enum来说明枚举类型,例如:
运行结果为:
可以看出,在C#中枚举类型值可以直接输出,输出结果为其枚举标识符本身,这一点与C有所不同。枚举值可以与整数值相互转换,转换的规定与C相同。
4.2.2 引用类型
C#中的另一大数据类型是引用类型。“引用”这个词在这里的含义是该类型的变量不直接存储所包含的值,而是指向它所要存储的值;也就是说,引用类型仅存储实际数据的地址。C#中的引用类型有类、数组和接口等,本节简单介绍类和数组。
1.类
类是面向对象编程的基本单位,是一种包含数据成员、函数成员和嵌套类型的数据结构。类的数据成员有常量、域和事件,函数成员包括方法、属性、索引指示器、运算符、构造函数和析构函数。
类和结构同样包含自己的成员,它们之间最主要的区别在于:类是引用类型,而结构是值类型。
类支持继承机制,通过继承,派生类可以扩展基类的数据成员和函数成员,从而达到代码重用和设计重用的目的。
如果对某个类定义了一个变量,则称该变量为类的一个实例。
关于类的详细介绍见4.5节。
2.数组
在C#中,数组的声明格式为:
例如可用如下语句声明一个整数数组。
在定义数组的时候可以预先在[]中指定数组元素的个数。数组的元素个数可以通过数组的Length属性获得。对数组元素的引用与C相同,采用“数组名[下标]”的形式。C#中数组元素的下标也是从0开始。下面是一个使用数组的例子。
由于数组是引用类型,只说明一个数组变量还不能对它进行存取,必须先使用new运算符创建一个数组。上面程序段创建了一个基类型为int的一维数组,初始化后逐项输出。其中arr.Length表示数组元素的个数,运行结果为:
在C语言中,数组仅仅是连续存储的一组数据,而C#中数组则是基于类的,这就提供了更强的功能和更高的安全性。例如,C#数组提供了Length属性方便编程;在C#中数组的越界存取是被禁止的。