您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 第02章 C#数据类型
1第二章C#数据类型序类型描述2.1值类型2.2数组2.3数据类型之间的转换2.4装箱和拆箱2.5操作数与优先级2序类型描述类型分为:值类型、引用类型。值类型直接存放真正的数据,值类型都有固定的长度,比如int占用4个字节,值类型的变量保存在堆栈上。作为值类型的变量,每个都有自己的数据,因此对一个变量的操作不会影响其他变量。引用类型存储对数据的内存地址的引用,位于受管制的堆上。堆用于存储可变长度的数据,比如字符串类型。作为引用类型的变量可以引用同一对象;因此对一个变量的操作会影响另一个变量所引用的同一对象。3值类型引用类型变量中存放真正的数据指向数据的引用指针内存空间配置堆栈(Stack)受管制的堆(ManagedHeap)内存需求较少较多执行效率较快较慢内存释放执行超过定义由垃圾回收机制自动处理时间点变量的作用域时可以为null不可以可以值类型和引用类型的区别42.1值类型C#的值类型可以分为三大类:基本型:包括整型、浮点型、小数型、布尔型,这些类型与其他语言的基本数据类型相似。结构型:适用于创建小型对象。枚举型:除char类型以外的其它常数组成的列表类型。52.1.1整型int型:32位有符号整数如inti=123;//也可以写为:System.Int32i=123;intj;注意:如果定义时不进行初始化,则使用时也必须先赋值,因为C#不允许使用未初始化的变量。long型:64位有符号整数如longmyLong=123L;或者longmyLong=123;//int型隐式转换为long型6char型:单一的Unicode字符(16位),可以用来表示世界上大部分文字。如charmyChar=’A’;charmyChar=’\x0041’;//’A’的十六进制表示charmyChar=’\u0041’;//’A’的Unicode表示sbyte型:8位有符号整数,范围在-128~127之间。byte型:16位无符号整数,取值范围在0~255之间。short型:16位有符号整数.7ushort型:16位无符号整数,取值范围在0~65,535之间。uint型:32位无符号整数。ulong型:64位无符号整数。注意:(1)书写一个常数时(如:23),默认为整型,若要表示非整型,可以用显式转换:如:sbytek=1;inti=2;k=(sbyte)i;//显式转换i=k;//隐式转换(2)不同整型转换原则:小范围类型可以隐式转换为大范围类型,大范围类型转换为小范围类型时要使用显式转换。82.1.2浮点型float类型:32位浮点数,取值范围在1.5×10-45~3.4×1038之间,精度为7位数。如floatmyFloat=2.3F;double类型:64位浮点数,取值范围在5.0×10-324~1.7×10308之间,精度为15~16位数。如doublemyDouble=2.7E+23;//2.7×102392.1.3小数型128位,它所表示的范围从大约1.0×10-28到7.9×1028,具有28至29位有效数字。特别适用于金融、货币等领域。如decimalmyMoney=300.5m;decimaly=9999999999999999999999999m;decimalx=123.123456789123456789m;102.1.4布尔型只有两个值true和false如:boolmyBool=false;112.1.5struct类型:结构类型如publicstructPoint{intx;inty;strings;}结构和类的区别:结构是一个值类型(在栈上),而类是一个引用类型(在堆上)。使用结构的主要思想是用于创建小型的对象。122.1.6enum类型:枚举型除char外的所有整型均可作为枚举型,如果不指明,则默认为整型。常用形式有:enumdays{Sun,Mon,Tue,Wed,Thu,Fri,Sat};//第一个成员值默认为0,第二个为1,……enumdays{Mon=1,Tue,Wed,Thu,Fri,Sat,Sun};//第一个成员值从1开始enumdays{mon=1,wed=3,sun,thu=8};//mon:1,wed:3,sun:4,thu:8注意:下列写法是错误的:enumnum:byte{x1=255,x2};因为:x1=255,x2应该是256,而byte类型范围是0-255但是可以这样写:enumnum:byte{x1=254,x2};13enum类型的使用示例:classTest{enumdays{Sun,Mon,Tue,Wed,Thu,Fri,Sat};staticvoidMain(){Console.WriteLine(days.Wed);daysmyday=days.Fri;Console.WriteLine(myday);Console.Read();}}输出结果:WedFri142.2数组特点:所有的元素类型都相同。常用形式举例://一维数组string[]arr={C,C++,C#};string[]myStrings=newstring[3];int[]intArr1=newint[4]{0,1,2,3};int[]intArr2={5,6,7};intnVar=5;int[]arrToo=newint[nVar];//二维数组int[,]arr={{0,1},{2,3},{4,5}};int[,]myArr=newint[5,3];15//锯齿型数组string[][]stra=newstring[3][];stra[0]=newstring[2]{a11,a12};stra[1]=newstring[3]{b11,b12,b13};stra[2]=newstring[5]{a,e,i,o,u};//输出锯齿型数组的元素for(inti=0;istra.Length;i++){for(intj=0;jstra[i].Length;j++)Console.Write(stra[{0}][{1}]={2},i,j,stra[i][j]);Console.WriteLine();}162.3数据类型之间的转换•同种类型之间的转换位数少的转换为位数多的,可以使用隐式转换;位数多的转换为位数少的,要使用显式转换。•不同类型之间的转换可以使用Convert类(见第四章)。17usingSystem;classTest{publicstaticvoidMain(){inti=10;longj=20;doublek=30D;j=i;//隐式转换k=j;Console.WriteLine({0},{1},{2},i,j,k);k=30.6D;j=(long)k;//显式转换i=(int)j;Console.WriteLine({0},{1},{2},i,j,k);Console.Read();}}运行结果:10,10,1030,30,30.6182.4装箱和拆箱C#中使用装箱和拆箱功能可以把数值类型看作对象使用。所有的数值类型,包括结构类型和内建类型,如int,都可以与object类型实现双向转换。192.4.1装箱装箱是数值类型隐式转换为object类型或者任何该数值类型实现了的接口类型。装箱一个数值会分配一个对象实例,并把该数值拷贝到新对象中。例如:inti=123;objecto=i;//装箱这条装箱语句执行的结果是在堆栈(stack)中创建了一个对象o,该对象引用了堆(heap)上int类型的数值,而该数值是赋给变量i的数值的拷贝。i和o两个变量的区别如图2.1所示。20在堆栈上在堆上inti=123;i被装箱objecto=i;123int123212.4.2拆箱拆箱是显式地把object类型转换成数值类型,或者把数值类型实了的接口类型转换成该数值类型。拆箱操作包括以下两个步骤:l检查对象实例,确认它是给定数值类型的包装数值。l把实例中的数值拷贝到数值类型的变量中。下面的语句演示了装箱和拆箱操作:inti=123;//数值类型objectbox=i;//装箱操作intj=(int)box;//拆箱操作222.5操作数与优先级C#有三大类操作数:一元操作数:有一个运算符组成,如i++。二元操作数:有两个运算符组成,如x+y。三元操作数:有三个运算符组成,如:条件?成立时结果:不成立时结果常用操作数可参看对应章节。
本文标题:第02章 C#数据类型
链接地址:https://www.777doc.com/doc-3194682 .html