基元类型(primitive type):
编译器直接支持的数据类型称为基元类型(primitive type)。
string 与 String:
由于C#中的string (一个关键字)直接映射到System.String (一个FCL类型),所以两者没有区别,都可以使用。
但是在C#中int始终映射在System.Int32,所以不管在 64操作系统还是32位操作系统上,代表的都是32位整数。
在C#中long映射到的是System.Int64,但是在其他编程语言中,long可能映射到Int16或Int32。 例如C++
checked 与 unchecked 基元类型。
是否溢出检查
static void Main(string[] args) { Byte b = 200; b = checked((Byte)(b + 200)); Console.ReadLine(); }
static void Main(string[] args) { Byte b = 200; b = (Byte)checked((b + 200)); Console.ReadLine(); }
引用类型与值类型:
CLR支持两种类型:引用类型与值类型:
1.任何被称为“类”的类型都是引用类型。
2.文档将所有值类型都称为结构或枚举。
class SomeRef { public Int32 x; } struct SomeVal { public Int32 x; } static void ValueTypeDemo() { SomeRef r1 = new SomeRef(); SomeVal v1 = new SomeVal(); r1.x = 5; v1.x = 5; Console.WriteLine(r1.x); Console.WriteLine(v1.x);
SomeRef r2 = r1; SomeVal v2 = v1; r1.x = 8; v1.x = 9; Console.WriteLine(v1.x); Console.WriteLine(v2.x); }
由上例子可以看出,重新赋值后的 v1 值改变,但是v2值并没有改变。
而 r1,r2 值全部改变,原因在于 r1,r2是引用类型,改变的只是地址的指向,所以当一个地址改变后 另外的地址也跟着指向新的地址。