Web应用开发技术与案例教程
上QQ阅读APP看书,第一时间看更新

4.2 数据类型

在.NET中,任何类型都是“类”。

C#支持的数据类型包括两大类:值类型和引用类型。值类型通常被分配在堆栈上,它的变量直接包含变量的实例,使用的效率比较高。引用类型总是分配在托管堆上,引用类型的变量通常仅包含一个指向实例的指针,系统通过该指针来引用其实例。

值类型包括整数类型、布尔类型、实数类型、字符类型、结构类型和枚举类型等;引用类型包括类和数组等。

4.2.1 值类型

1.整数类型

C#中有多种整数类型,见表4-1。

表4-1 C#中的整数类型

978-7-111-63649-6-Chapter04-5.jpg

2.布尔类型

布尔(bool)类型用来表示“真”和“假”这两个概念,分别用true和false两个值表示。可将布尔值赋给bool变量,也可以将bool表达式赋给bool变量。在C和C++中用0表示假,其他任何非0的值都表示真,这种情况在C#中已经被彻底改变。下面是一个使用布尔型变量的例子。

978-7-111-63649-6-Chapter04-6.jpg

运行结果为:

978-7-111-63649-6-Chapter04-7.jpg

3.实数类型

C#中的实数类型见表4-2。

表4-2 C#中的实数类型

978-7-111-63649-6-Chapter04-8.jpg

4.字符类型

C#支持的字符类型采用Unicode字符集,一个Unicode标准字符的长度为16位,范围为U+0000到U+ffff,用它可以表示世界上大多数语言。下面例子说明了一个字符型变量。

978-7-111-63649-6-Chapter04-9.jpg

C#也支持转义字符的使用,转义字符的规定与C语言基本相同。

5.结构类型

与C和C++相同,C#也可以用struct来说明结构类型。

6.枚举类型

与C和C++相同,C#也可以用enum来说明枚举类型,例如:

978-7-111-63649-6-Chapter04-10.jpg

运行结果为:

978-7-111-63649-6-Chapter04-11.jpg

可以看出,在C#中枚举类型值可以直接输出,输出结果为其枚举标识符本身,这一点与C有所不同。枚举值可以与整数值相互转换,转换的规定与C相同。

4.2.2 引用类型

C#中的另一大数据类型是引用类型。“引用”这个词在这里的含义是该类型的变量不直接存储所包含的值,而是指向它所要存储的值;也就是说,引用类型仅存储实际数据的地址。C#中的引用类型有类、数组和接口等,本节简单介绍类和数组。

1.类

类是面向对象编程的基本单位,是一种包含数据成员、函数成员和嵌套类型的数据结构。类的数据成员有常量、域和事件,函数成员包括方法、属性、索引指示器、运算符、构造函数和析构函数。

类和结构同样包含自己的成员,它们之间最主要的区别在于:类是引用类型,而结构是值类型。

类支持继承机制,通过继承,派生类可以扩展基类的数据成员和函数成员,从而达到代码重用和设计重用的目的。

如果对某个类定义了一个变量,则称该变量为类的一个实例。

关于类的详细介绍见4.5节。

2.数组

在C#中,数组的声明格式为:

978-7-111-63649-6-Chapter04-12.jpg

例如可用如下语句声明一个整数数组。

978-7-111-63649-6-Chapter04-13.jpg

在定义数组的时候可以预先在[]中指定数组元素的个数。数组的元素个数可以通过数组的Length属性获得。对数组元素的引用与C相同,采用“数组名[下标]”的形式。C#中数组元素的下标也是从0开始。下面是一个使用数组的例子。

978-7-111-63649-6-Chapter04-14.jpg

由于数组是引用类型,只说明一个数组变量还不能对它进行存取,必须先使用new运算符创建一个数组。上面程序段创建了一个基类型为int的一维数组,初始化后逐项输出。其中arr.Length表示数组元素的个数,运行结果为:

978-7-111-63649-6-Chapter04-15.jpg

在C语言中,数组仅仅是连续存储的一组数据,而C#中数组则是基于类的,这就提供了更强的功能和更高的安全性。例如,C#数组提供了Length属性方便编程;在C#中数组的越界存取是被禁止的。