C#数据类型C#的数据类型可以分为3类:数值类型、引用类型、指针类型。指针类型仅在不安全代码中使用。值类型包括简单类型(如字符型、浮点型和整数型等)、集合类型和结构型。引用类型包括类类型、接口类型、代表类型和数组类型。值类型和引用类型的不同之处是值类型的变量值直接包含数据,而引用类型的变量把它们的引用存储在对象中。对于引用类型的变量,完全有可能让两个不同的变量引用同一个对象,这样一来,对其中一个变量的操作就会影响到被另一个变量引用的对象。对于值类型的变量而言,每一个变量有它们自己的数值,因此对其中一个变量的操作不可能影响到另外一个变量。值类型所有的值类型都隐含地声明了一个公共的无参数的构造函数,这个构造函数叫做默认构造函数。默认构造函数返回一个初始为零的值类型的实例,称之为默认值。对于sbyte、byte、short、ushort、int、uint、long、ulong,默认值为0。对于char,默认值是‘\x0000’对于float,默认值是0.0F对于double,默认值是0.0D对于decimal,默认值是0.0M对于bool,默认值是false对于一个枚举类型,默认值是0对于一个结构类型,默认值的设置就是把所有值类型的域都设置为它们各自的默认值,把所有的引用类型的域赋为空简单类型C#提供一套预定义的结构类型叫做简单类型。简单类型用保留字定义,这些保留字仅仅是在System名字空间里预定义的结构类型的化名。比如int是保留字,System.Int32是在System名字空间中预定义类型。一个简单类型和它化名的结构类型是完全一样的,也就是说写int和写System.Int32是一样的。简单类型主要有整型、浮点类型、小数类型、布尔类型、字符型整型C#中支持9种整型:sbyte、byte、short、ushort、int、uint、long、ulong和char。Sbyte:代表有符号的8位整数,数值范围从-128~127Byte:代表无符号的8位整数,数值范围从0~255Short:代表有符号的16位整数,范围从-32768~32767ushort:代表有符号的16位整数,范围从-32768~32767Int:代表有符号的32位整数,范围从-2147483648~2147483648uint:代表无符号的32位整数,范围从0~4294967295Long:代表有符号的64位整数,范围从-9223372036854775808~9223372036854775808Ulong:代表无符号的64位整数,范围从0~18446744073709551615char:代表无符号的16位整数,数值范围从0~65535。Char类型的可能值对应于统一字符编码标准(Unicode)的字符集。Char类型与其他整数类型相比有以下两点不同之处:1、没有其他类型到char类型的隐式转换。即使是对于sbyte,byte和ushort这样能完全使用char类型代表其值的类型,sbyte,byte和ushort到char的隐式转换也不存在。2、char类型的常量必须被写为字符形式,如果用整数形式,则必须带有类型转换前缀。比如(char)10赋值形式有三种:charchsomechar=“A”;charchsomechar=“\x0065”;十六进制charchsomechar=“\u0065;unicode表示法.字符型中有下列转义符:1、\‘用来表示单引号2、\”用来表示双引号3、\\用来表示反斜杠4、\0表示空字符5、\a用来表示感叹号6、\b用来表示退格7、\f用来表示换页8、\n用来表示换行9、\r用来表示回车10、\t用来表示水平tab11、\v用来表示垂直tab浮点类型C#支持两种浮点类型:float和double。Float型所能表示的值的范围大约可以从1.5*10ˆ-45~3.4*10ˆ38,精确到小数点后面7位。Double型所能表示的值的范围大约可以从5.0*10ˆ-324~1.7*10ˆ308,精确到小数点后面15位或16位。如果二元操作中的其中一个操作数为浮点类型,那么另外一个操作数是整型或浮点类型,运算规则如下:1、如果其中一个操作数是整型,则操作数被转换为另一个操作数的浮点数类型;2、如果操作数之一为double,则另一操作数也被转换成double类型,运算以double类型的精度和取值范围进行,并且所得结果也为double类型;3、否则,运算至少将以float类型的取值范围和精度进行,并且所得结果也为float型。小数(decimal)类型小数类型非常适用于金融和货币运算。数值范围从1.0*10ˆ-28~7.9*10ˆ28,精确到小数点后面28位。如果二元操作中的其中一个操作数是小数类型,那么另外一个从操作数是整型或小数类型。整型在运算前被转化为小数类型数。如果一个小数类型的算术运算产生了一个对于小数类型的格式来说太小的值,操作的结果将会变成0。如果一个小数类型的算术运算产生了一个对于小数类型的格式来说太大的值,就会触发溢出错误。小数类型较浮点类型而言,具有更大的精确度,但是数值范围相对小了很多。将浮点类型的数向小数类型的数转化时会产生溢出错误,将小数类型的数向浮点类型的数转化时会造成精确度的损失。因此,两种类型不存在隐式或显式转换。布尔型:值为true或false。没有标准能实现布尔类型和其他类型的转换。枚举类型:枚举类型的元素使用的类型只能是long、int、short、byte。默认类型是int。默认第一个元素的值是0,每一个连续的元素按1递增。可以给元素直接赋值。如:enummonthnames{January=1,February,march=31};可以强制定义其他类型,如:enummonthnames:byte{January,February,March};结构类型结构类型也是一种值类型,使用它的目的是用于创建小型的对象,用以节省内存.下面的例子表示一个使用byte类型的4个字段的IP地址。usingSystem;StructIP//声明结构{publicbyteb1,b2,b3,b4;}Classtest{publicstaticvoidMain(){IPmyIP;myIP.b1=192;myIP.b2=168;myIP.b3=1;myIP.b4=101;Console.Write(“{0}.{1}.”,myIP.b1,myIP.b2);Console.Write(“{0}.{1}”,myIP.b3,myIP.b4);}}引用类型引用类型包括类类型、接口类型、代表类型和数组类型。1、类类型类类型定义了一种数据结构,这个数据结构中包含了数据成员(如常量、字段和事件等),函数成员(如方法、属性、索引、操作、构造函数和析构函数等)和嵌套类型。支持继承。2、对象类型对象类型是其他所有类型最终的基础类型。在C#中每一种类型都直接或者间接的源于object这个类类型。3、字符串类型字符串类型是直接从object中继承而来的密封类。String类型的值可以写成字符串文字的形式。4、接口类型一个接口声明一个只有抽象成员的引用类型,接口仅仅存在方法标志,但没有执行代码。当定义一个类时,如果类从接口派生,可以派生自多重接口;但是如果类从类派生,就只能从一个类派生。声明方法如例:interfaceiface{voidshowmyface();}5、代表类型代表引用一种静态的方法或者对象实例,引用该对象的实例方法。与其接近的是c/c++中的指针,但指针只能访问静态的函数,代表既能访问静态的方法,也能访问实例的方法。6、数组数组是包含一串变量的数据结构。数组变量也称做数组元素,它们具有相同的类型,这种类型也称做数组元素类型。数组的元素类型可以是任何类型,包括数组类型。数组用下标确定每一个数组元素的索引号。只有一个下标的数组称为一维数组,多于一个下标的数组称为多维数组。例:int[]a={0,2,4,6,8};等价于int[]a=newint[]{0,2,4,6,8};也可以这样初始化:a[0]=0;a[1]=2;a[2]=4;a[3]=6;a[4]=8;int[]a;//int型的一维数组int[,]a;//int型的二维数组int[,,]a;//int型的三维数组int[][]a;//int型的数组的数组int[][][]a;//int型的数组的数组的数组数组的每个维数的长度不是数组类型的一部分,维数的长度是在数组创建语句中指定的,而不是在数组类型中指定的,例如:int[,,]a3=newint[10,20,30];a3是是一个数组变量,int[,,]没有指定数组的长度,数组创建语句newint[10,20,30]才指定。下面的例子创建一个数组的数组:int[][]J=newint[3][];J[0]=newint[]{1,2,3};J[1]=newint[]{1,2,3,4,5,6};J[2]=newint[]{1,2,3,4,5,6,7,8,9};加框和消框boxing和unboxing允许把任何值类型的值转化为对象(object)类型,或者把object类型转化为值类型,这样它就把值类型和引用类型紧密的结合起来了。简单的说,加框操作就是数值类型转换为类型对象,消框操作就是类型对象转换为数值类型。1、加框操作给一个值加框指隐式地把任何数值类型转换成类型对象。当一个数值类型被加框时,一个对象实例就被分配,而且数值类型的值复制给新的对象。如:intn=200;objecto=n;//加框操作o=201;Console.WriteLine(“{0}{1}”,n,o);改变o值,n的值不变2、消框是显式操作-必须告诉编译器,想从对象中抽取出哪一种值类型。当执行消框操作时,C#检测所请求的值类型是否存储在对象实例中。如:intn=200;objecto=n;intu=(int)u;//消框转化操作符1、括号操作符格式()2、点操作符格式(E.I)其中E是基本表达式或者预定义类型,I是一个标识符。C++里除了“.”之外还有“::”“-”,C#里用点操作符来代替。比如一个类T有成员变量M,在C++里用T::M来引用,C#里用T.M来引用。另一点不同的是,C#里预定义类型也是从Object类派生出来的,因此也定义了成员变量,比如,I是一个short类型的变量,那么I.ToInt()操作将返回一个Int类型的值。3、后缀加减操作符格式:p++;p--;++p;--p;结果是给变量p加1或减14、new操作符格式:a、new类型(参数列表)b、new数组类型初始化列表c、new代表类型(表达式)5、typeof操作符该操作返回一个类型对应的system.type,如:typeof(int);typeof(System.Int32);typeof(string);各自的结果为int32,int32,string。typeof只对类型操作,不能对变量操作,例如,“intI;typeof(I);”是不合法的6、sizeof操作符该操作可获得一个类型所占用的空间大小,以字节为单位。该操作符用在unsafe模块中,如Unsafe{S=sizeof(int);}或者在调用该操作符的函数中使用该前缀。7、单目操作符(1)+-操作(2)逻辑非:!(表达式)(3)位非:~(表达式)(4)强制类型转换:(T)表达式8、关系运算符==、!=、、、=、=、isis用来判断一个变量是否是某一类型,例如,sisstring9、位逻辑操作符&(位与)、|(位或)、^(异或)。可以对整数、布尔、和枚举类型进行这三种操作。10、条件逻辑操作符包括&&(与)和||(或)11、条件运算符b?x:yb为真,结果是x,否则是y语句1、语句块格式:{语句列表}2、空语句格式:;3、标签语句格式:标识:语句标签语句可以通过goto语句来引用。标签不会和变量混淆,例如:intF(intx){if(x=0)gotox;x=-x;x:returnx;}上面的代码中x