作为面向对象的语言,C#中的数据类型是统一的,任何类型都是直接或间接地从object类型派生而来,任何类型的值都可以被当做对象。另外,C#是个强类型的安全语言,编译器要对所有变量的数据作严格的检查,保证存储在变量中的每个数值与变量类型一致。
根据在内存中存储位置的不同,C#中的数据类型可分为两类。
一、值类型
数据长度固定,存放于栈(Stack)上。值类型变量直接保存变量的值,一旦离开其定义的作用域,立即就会从内存中删除。每个值类型的变量都有自己的数据,因此对一个该变量的操作不会影响到其他变量。
C#的值类型是从System.ValueType类继承而来,包括简单类型、枚举类型、结构类型和可控类型。
1)简单类型:
(1)有符号整型:sbyte、 short、 int、 long
(2)无符号整型:byte、 ushort、 uint、 ulong
(3)Unicode字符型:char
(4)实数型:float、 double、 decimal
(5)布尔型:bool
C#简单类型
类 型
长 度
范 围
预定义结构类型
sbyte
8位
-128 ~ 127
System.Sbyte
byte
8位
0 ~ 255
System.Byte
char
16位
U+0000 ~ U+ffff(Unicode字符集中的字符)
System.Char
short
16位
-32,768 ~ 32,767
System.Int16
ushort
16位
0 ~ 65,535
System.Uint16
int
32位
-2,147,483,648 ~ 2,147,483,647
System.Int32
uint
32位
0 ~ 4,294,967,295
System.Uint32
long
64位
-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
System.Int64
ulong
64位
0 ~ 18,446,744,073,709,551,615
System.Uint64
float
32位
1.5 x 10e-45 ~ 3.4 x 10e38
System.Single
double
64位
5.0 x 10e-324 ~ 1.7 x 10e308
System.Double
decimal
128位
NA
System.Decimal
bool
NA
true/false
System.Boolean
2)枚举类型:
enum E{···}形式的用户自定义类型
3)结构类型:
struct S{···}形式的用户自定义类型
4)可空类型:
具有null值得值类型扩展,如int? 表示可为null的int类型
二、引用类型
数据长度可变,存放于堆(Heap)上。引用类型变量保存的是数据的引用地址,并一直保存在内存中,直到.NET垃圾回收器将它们销毁。不同引用类型的变量可能引用同一个对象,因此对一个引用类型变量的操作会影响到引用同一对象的另一个引用类型变量。
引用类型的变量通常被称为对象,对象的实例使用new关键字创建。C#中提供的引用类型包括:类、接口、数组、委托。
1)类类型:
(1)object:其他所有类型的基类
(2)string:Unicode字符串
(3)自定义类型:class C{···}形式的用户自定义类型
2)接口类型:
interface I{···}形式的用户自定义类型
3)数组类型:
一维和多维数组
4)委托类型:
delegate int D{···}形式的用户自定义类型