C#是一种强类型语言,无论是变量、常量,还是方法的参数、返回值,都需要指定相应的数据类型。从某种意义上来说,数据类型就像数据结构的模板,它包含了很多信息:
-
一种数据类型所需要的内存空间;
-
该数据类型的取值范围,即它可以表示的最大值和最小值;
-
它所继承的基类信息;
-
运行时它在内存中存储的位置;
-
该数据类型本身所支持的操作,比如数字型支持四则运算;
-
它自身的成员,如方法、字段、事件,等等。
编译器依赖数据类型来实现类型安全,比如可以对数字型变量实施加减操作,但无法对布尔型执行同样的操作。另外,编译器将数据类型作为元数据放入编译生成的程序集中,进一步保证程序中运行时依赖相应的数据类型进行正确的内存分配和回收,进一步保证类型安全性。
.NET框架已经帮我们定义了大量的基本数据类型,对应表4-2,我们可以看到C#的数据类型和.NET框架数据类型的对应关系,事实上,C#的内置类型关键字只不过是CTS中预定义类型的一个别名而已,它们是等价的,如表4-2所示。
在表4-2中,除了object和string类型外,其他类型都称为简单类型。
因为C#内置类型的关键字就是CTS类型的别名,因此在使用时它们可以互换,而使用CTS类型的别名显然要省事得多,如代码清单4-7所示。
代码清单4-7 C#类型关键字和CTS类型的关系
int Age = 10;
System.Int32 Count = 20;
我们知道,CTS中的类型只有值类型和引用类型两种,包括.NET框架预定义的BCL类库和我们自定义的类、接口等,如图4-4所示。
下面我们从值类型和引用类型两方面来分析C#语言的内置类型。
1. 内置的值类型
首先通过一幅图来看看C#语言中的值类型包含哪些类型,如图4-5所示。
由图4-5可以看出,值类型主要由两大类型组成:结构类型和枚举类型。而我们平时常用的数值型、布尔型都是结构类型,其中数值型又包括:整型、浮点型和十进制型,下面将分别介绍。
正确的使用类型是很重要的,我们先通过表4-3了解整型所包含的类型,以及它们的取值范围和长度信息,然后对每个类型逐一介绍。
(1)sbyte
sbyte
关键字表示整数数据类型。
声明和使用sbyte
类型的变量:
sbyte val = 100;
(2)byte
byte
关键字表示整数数据类型。
声明和使用byte
类型的变量:
byte val = 100;
(3)char
char
关键字用于声明一个Unicode字符。Unicode字符是16位字符,用于表示世界上已知的绝大多数书面语言。
对char
关键字的使用举例如下:
char[] chars = new char[4];
chars[0] = 'X'; // 字符
chars[1] = '\x0058'; // 16进制
chars[2] = (char)88; // 从数值型转换
chars[3] = '\u0058'; // Unicode
foreach (char c in chars)
{
Console.Write(c + " ");
}
上述代码的输出结果为:X X X X
。
(4)short
short
关键字表示整数数据类型。
short
的用法如下:
short val = 12345;
(5)ushort
ushort
关键字表示整数数据类型。
ushort
的用法如下:
ushort ushortVal = 65535;
(6)int
int
关键字表示整数数据类型。
int
的用法如下:
int iVal = 65535;
(7)uint
uint
关键字表示整数数据类型。
uint
的用法如下:
uint theUint = 967295;
(8)long
long
关键字表示整数数据类型。
long
的声明有如下几种方式:
long longValue1 = 4294967296;
long longValue2 = 4294967296L; // 后缀'L'
long longValue3 = 4294967296l; // 后缀'l',和大写'L'等价
注意虽然后缀使用大写的"L"
和小写的"l"
均可,但小写的"l"
易和数字"1"
混淆,因此为了不引起混淆,建议使用大写的"L"
做后缀。
(9)ulong
ulong
关键字表示整数数据类型。
ulong
的用法如下:
ulong uLong = 9223372036854775808;
则其类型为以下类型中可表示其值的第一个类型:int
、uint
、long
、ulong
。在上面的示例中,它是ulong
类型。
还可根据以下规则使用后缀指定文字类型:
-
如果使用
L
或l
,那么根据整数的大小,可以判断出其类型为long
还是ulong
。 -
如果使用
U
或u
,那么根据整数的大小,可以判断出其类型为uint
还是ulong
。 -
如果使用
UL
、ul
、Ul
、uL
、LU
、lu
、Lu
或lU
,则整数的类型为ul