曾经读过的一本的技术书里是这样写道的:
" 面向对象编程吸取了结构化编程的精华,并将它和一些新概念结合在一起,由此得到一个不同的、更好的组织程序方法。大多数情况下,程序有两种组织方法:以代码(执行操作的对象)为中心或者以数据(受到影响的对象)为中心。只使用结构化方法进行编程时,程序一般以代码为中心来组织。这种方法可以认为是“代码作用于数据”。
面向对象程序使用的是另一种方法,它们以数据为中心组织程序,其关键原理体现在“数据控制对代码的访问”。在面向对象语言中,定义了数据和作用于该数据的相应代码,因此数据类型用于准确定义应用于这些数据的操作。 "
——摘自《C#4.0 完全参考手册》(美)Herbert Schildt著
C#是一种强类型语言,所有的操作都要经过编译器的类型检查,非法操作将不能通过编译,这样做有助于防止出现错误,增强了程序的可靠性。在C#中,所有的变量、表达式和值都是有其类型。
C#把数据类型分为两种:值类型和引用类型 。
两种类型的区别在于变量保存的内容。对于值类型,变量保存的是实际值,而对于引用类型,则是保存的为值的引用。
在C#中,所有的数据类型都以与平台无关的方式定义,以备将来C#和.Net迁移到其他平台上
1、值类型:C#主要包括13种值类型,通常称他们为简单类型或者基本类型。
1)整型:有8个预定义整形类型。 如下表:
名称 | CTS类型 | 说明 | 范围 |
---|---|---|---|
sbyte | System.SByte | 8位有符号的整数 | -128~127(-2^7~2^7-1) |
short | System.Int16 | 16位有符号短整数 | -32768~32767(-2^15~2^15-1) |
int | System.Int32 | 32位有符号的整数 | -2147483648~2147483647(-2^31~2^31-1) |
long | System.Int64 | 64位有符号长整型 | -9223372036854775808~9223372036854775807 (-2^64~2^64-1) |
byte | System.Byte | 8位无符号整形 | 0~255(0~2^8-1) |
ushort | System.UInt16 | 16位无符号短整型 | 0~65535(0~2^16) |
uint | System.UInt32 | 32位无符号整型 | 0~4294967295(0~2^32-1) |
ulong | System.UInt64 | 64位无符号长整型 | 0~18446744073709551615(0~2^64-1) |
C#定义了各种整型的有符号形式和无符号形式。有符号整数和无符号整数的不同之处在于对整数高阶位的处理方式。对于有符号整数,编译器将产生代码,把整数的高阶位作为一个符号位,为0时表示正直,为1时表示负值。
2)浮点类型:分为单精度和双精度数值。如下表:
名称 | CTS类型 | 说明 | 位数 | 范围 |
---|---|---|---|---|
float | System.Single | 32位单精度浮点数 | 7 | 1.5E-45~3.4E+38 |
double | System.Double | 64位双精度浮点数 | 15/16 | 5E-324~1.7E+308 |
如果在代码中对某个非整数值硬编码,则编译器以便假定该变量是double,如果想指定该值为float,可以在其后加上字符F(或f)。例如: float f=12.5F
3)decimal类型:表示精度更高的浮点数,如下表:
名称 | CTS类型 | 说明 | 位数 | 范围 |
---|---|---|---|---|
decimal | System.Decimal | 128位高精度十进制数表示 | 28 | 1E-28~7.9E+28 |
这种类型多用于财务计算,不是基本类型,所以在计算式使用该类型会有性能损失。
如果要把数字制定为decimal类型,可以在数字后面加上字符M(或m)。例如:decimal d=12.60M
4)bool类型:用于包含布尔值true或false,如下表:
名称 | CTS类型 | 说明 | 位数 | 值 |
---|---|---|---|---|
bool | System.Boolean | 表示true或false | NA | true或false |
注意:bool值和整数不能互相隐式转换,如果变量(或函数的返回类型)声明为bool类型,就只能使用值true或false。如果试图使用0表示false,非0值表示true,就会出错。 5)字符类型:为了保存单个字符值,如下表:
名称 | CTS类型 | 值 |
---|---|---|
char | System.Char | 表示一个16位的(Unicode)字符 |
注意:char类型的字面量是用单引号括起来,如果把字符放在双引号中,编译器会把它看作字符串,从而产生错误。
除了char表示字符字面量外,还可以用4位十六进制的Unicode值,带有数据类型转换的整数值或十六进制数表示它们。它们还可以用转义序列表示。
6)C#还定义了其他三种类别的值类型:枚举(enum)、结构(struct)和可空类型。
2、引用类型:C#支持两种预定义引用类型,如下表:
名称 | CTS类型 | 说明 |
---|---|---|
object | System.Object | 根类型,CTS中的其他类型都是从它派生而来的(包括值类型) |
string | System.String | Unicode字符串 |
1)object类型:在C#中,object类型就是最终的父类型,所有内置类型和用户定义的类型都从它派生而来。
2)string类型:
虽然string类型的赋值更像值类型的赋值,但是string是一个引用类型。
string与引用类型有一些区别如:字符串是不可改变的。修改其中一个字符串,就会创建一个全新的string对象,而另一个字符串不发生任何变化。
字符串字面量放在双引号中。