简介:
作为一种值类型,简单类型(simple type)是C#中内建类型的一个子集,不过事实上这些类型被定义为.NET Framework类库(.NET FCL)的一部分。简单类型由若干数字类型和一个bool类型构成。这些数字类型包括一个十进制类型(decimal)、九个整数类型(byte、char、int、long、sbyte、short、unit、ulong、和ushort)以及两个浮点类型(float和doubule)。表3-1列出了.NET Framework中的简单类型及其完全限定名。
表3-1:简单数据类型
全名 | 别名 | 取值范围 |
---|---|---|
System.Boolearn | bool | true或false |
System.Byte | byte | 0~255 |
System.SByte | sbyte | -128~127 |
System.Char | char | 0~65535 |
System.Decimal | decimal | -79,228,162,514,264,337,593,543,950,335~79,228,162,514,264, 337,593,543,950,335 |
System.Double | double | -1.79769313486232e308~1.79769313486232e308 |
System.Single | float | -3.40282347E+38~3.40282347E+38 |
System.Int16 | short | -32768~32767 |
System.Uint16 | ushort | 0~65535 |
System.Int32 | int | -2,147,483,648~2,147,483,647 |
System.UInt32 | uint | 0~4,294,967,295 |
System.Int64 | long | -9,223,372,036,854,775,808~9,223,372,036,854,775,807 |
System.UInt64 | ulong | 0~18,446,744,073,709,551,615 |
当处理浮点数据类型时,精度可能比数值的范围更重要。浮点数据类型的精度如表3-2所示:
表3-2:浮点精度:
浮点类型 | 精度 |
---|---|
System.Single(float) | 7位 |
System.Double(double) | 15-16位 |
System.Decimal(decimal) | 28-29位 |
在使用浮点与使用十进制数之间进行决策时,要考虑以下两个方面:
- 浮点供科学家使用,设计用于表示物理学中精度和量值的整个范围上的不精确量。
- 十进制数供普通人使用,设计用于进行十进制计算,仅需要小数点之后少量的数字,或者用于需要准确记录每一分钱的使用情况(例如核对支票本)。
C# 为各种数据类型保留的关键字是针对类型的完全限定名称的简单别名。因此,用户使用类型名还是保留字是无关紧要的,C#编译器将生成同样的代码。
要注意下列类型与公共语言规范(common language specification,CLS)并不兼容:sbyte、ubyte、uint和ulong。结果可能导致他们不被其他.NET语言支持。枚举隐式继承自System.Enum,后者又继承自System.ValueType。枚举有着单一的应用。描述一个特定组的数据项。例如,颜色Red、Bule和Yellow可由枚举ShapeColor定义;
enum ShapeColor { Red, Blue, Yellow }
枚举中的每个数据项接受一个数字值,无论你是否给它赋过值。由于编译器为枚举中的每个项自动添加以0开头并且递增1的数字,因此上述定义的ShapeColor枚举如果以下列方式定义,那么它将完全相同:
enum ShapeColor { Red = 0,Blue = 1,Yellow = 2 }
枚举是一种很好的代码文档化工具。例如,如下编写的代码会更加直观。
ShapeColor currentColor = ShapeColor.Red;
下面这样就不太直观。
int currentColor = 0;
这两种机制都能工作,但第一种方法容易阅读和理解,特别是对于一个接管其他人代码的新开发人员而言。枚举对保证C#中的类型安全也有益处,而使用原始的int不能提供数据安全。CLR将枚举视为其基础类型的成员,因此对于所有语言他并非都是类型安全的。