第2章C数据类型.ppt

上传人:sccc 文档编号:5896172 上传时间:2023-08-31 格式:PPT 页数:120 大小:2.09MB
返回 下载 相关 举报
第2章C数据类型.ppt_第1页
第1页 / 共120页
第2章C数据类型.ppt_第2页
第2页 / 共120页
第2章C数据类型.ppt_第3页
第3页 / 共120页
第2章C数据类型.ppt_第4页
第4页 / 共120页
第2章C数据类型.ppt_第5页
第5页 / 共120页
点击查看更多>>
资源描述

《第2章C数据类型.ppt》由会员分享,可在线阅读,更多相关《第2章C数据类型.ppt(120页珍藏版)》请在三一办公上搜索。

1、,第2章 数据类型和表达式,课程目标,C#的两种数值类型引用类型和值类型变量和常量的命名规则以及定义表达式和运算符字符串的处理装箱和拆箱,变量(2-1),语法:访问修饰符 数据类型 变量名,Public,Private,Protected,int,string,float,变量用于存储特定数据类型的值,变量的命名,基本的命名规则如下:变量名的第一个字符必须是字母、下划线或。其后的字符可以是字母、下划线或数字。命名要点变量的名称中不能出现c#中的关键字;最好根据变量的作用来命名,即“见名知义”;我们约定使用PascalCase命名方法。,变量(2-2),static void Main(stri

2、ng args)/声明布尔型、字符串型、整型、短整型和浮点型变量 bool test=true;short num1=19;int num2=14000;string val=John;float num3=14.5f;/显示变量值 Console.WriteLine(布尔值=+test);Console.WriteLine(短整型值=+num1);Console.WriteLine(整型值=+num2);Console.WriteLine(字符串值=+val);Console.WriteLine(浮点值=+num3);,变量中存储的值取决于该变量的类型,定义变量的注意事项,变量由多个单词组成

3、时,让单词首字母大写来分隔单词,而不要使用下划线作为单词的分隔符。尽量少使用单字母作为变量名(循环计数变量除外)。多使用有意义的单词作为变量名称。变量应该先声明后使用。变量应该先初始化后使用。,静态变量和实例变量,用static修饰符声明的变量称为静态变量,没有static修饰符声明的变量称为实例变量。静态变量在任何时候都只有一个副本,而实例变量属于某个实例,每一个类的实例都有一个副本。public static long id=1027;public int number;public decimal price;,静态变量和实例变量,看一个例子:,局部变量,在程序块内声明的变量称为局部变量

4、。for(int i=0;i5;i+)Console.WriteLine(i);,隐式类型的局部变量,声明变量时,可以不指定数据类型,而由编译器根据变量的初始值推断出变量的数据类型,这个变量就称为隐式变量。语法:var 隐式变量名=初始值;var age=30;var name=“张三”;var flag=true;,隐式类型的局部变量,使用隐式类型局部变量时,应注意:1.定义隐式类型的局部变量时,必须初始化;2.不能把隐式类型的局部变量初始化为null;3.不能在同一语句中初始化多个隐式类型的变量,如:var age=20,count=30;4.隐式类型的局部变量不能作为函数的返回值和参数;

5、5.隐式类型的局部变量不能作为类的成员。,常量 2-1,语法:访问修饰符 const 数据类型 常量名=常量值;,Public,Private,Protected,常量用于在整个程序中将数据保持同一个值,int,string,float,常量 2-2,static void Main(string args)/PI常量PIconst float PI=3.14F;/由地球引力引起的加速度常量,单位为 cm/s*s const float Gravity=980;/钟摆的长度 int length=40;/钟摆的周期 double period=0;/钟摆周期的计算公式 period=2*PI*

6、Math.Sqrt(length/Gravity);Console.WriteLine(钟摆的周期为 0 秒,period);,声明常量,在表达式中使用常量,const 关键字用于声明常量,C#的基本数据类型,C#中的数据类型分为两个基本类别 值类型 表示实际数据 只是将值存放在内存中 值类型都存储在堆栈中 int、char、结构引用类型 表示指向数据的指针或引用 包含内存堆中对象的地址 为 null,则表示未引用任何对象 类、接口、数组、字符串,C#两种数值类型,C#的基本数据类型,值类型和引用类型的区别(例子)基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的

7、值。引用类型变量不存储实际数据内容,而是存储对实际数据的引用。引用类型变量的赋值只复制对数据的引用,而不复制数据本身。,2.1 值类型简单类型 1.简单类型是C#预置的数据类型,包括整数类型、浮点类型、decimal类型、布尔类型和字符类型。2.在.net框架中,也称为预定义结构类型,保留字就是预定义类型的别名,因此简单类型与预定义结构类型是等价的。int x=10;System.Int32 x=10;3.简单类型也具有成员:int i=int.MaxValue;string s=i.ToString();,2.1.1 简单类型整数类型 c#支持9种整数类型:sbyte,byte,short,

8、ushort,int,uint,long,ulong和char。若没有显示说明,则整数值默认为int类型。若要将数值指定为其他整数类型,则可以在数值后边加上后缀。如:U表无符号数,L表长整型等。,2.1.1 简单类型浮点类型 c#支持2种浮点类型:float和double。若没有显示说明,则浮点数默认为double类型。若要将数值指定为float类型,则可以在数值后边加上后缀F。,2.1.1 简单类型decimal类型 1.这种类型是适合财务和货币计算的128位数据类型。2.必须在数值后边加上后缀M表示decimal类型,如果不加,则默认为double类型。,2.1.1 简单类型布尔类型 在C

9、#中,可以将布尔值赋给布尔型变量,也可以将值为布尔类型的表达式赋给布尔型变量。在C#中,布尔类型与整型截然不同,不能用布尔值代替整数值。,2.1.1 简单类型,字符类型 字符类型包括字母、数字、标点符号以及特殊的控制字符等。定义一个字符变量可以如下:char x=a;注意:表示字符时要用单引号括起来,也可以为字符变量赋转义字符。char y=x0041;,转义序列表,转义字符示例,/转义字符using System;class ESCCharacter static void Main(string args)Console.WriteLine(毛主席他老人家说过:好好学习t天天向上.n我们一

10、定要谨遵他老人家的u005C教诲u005C!);,使用字符类型时应注意:不存在从其他类型到char类型的隐式转换;对字符型变量使用整数进行赋值和运算是不允许的字符型和整型之间可以进行显式转换如:char c=(char)10;int d=(int)j;看一个简单类型的综合例子,2.1 值类型结构类型 结构的定义需使用struct关键字,定义格式如下:struct 结构类型名称 public 类型名称1 结构成员名称1;private 类型名称2 结构成员名称2;.,(1)声明结构变量 定义结构后,一个新的数据类型就产生了,可以像使用基本数据类型那样,用结构来声明变量。(2)访问结构变量 使用结

11、构中的成员必须指出访问的结构变量。方法是在结构变量和成员之间通过运算符“”连接在一起。即:结构变量名.成员名,结构类型是在主函数外声明的。Struct student string id;string name;int age;int score;在main函数中定义变量:Student s;访问结构变量:s.id=“2008010844”;在引用结构体成员时,处理它们的方式与成员类型相同的变量完全一样。注意:结构中的字段不能在定义时赋初值。(看一个例子),枚举类型 定义枚举类型使用关键字enum,定义枚举类型的一般格式为:enum 枚举类型名称 符号常量1,符号常量2,(1)如果未对枚举元素

12、进行初始化,则各个枚举元素的默认值为0、1、2。(2)还可以在定义枚举类型时为成员赋予特定的整数值,例如 enum SolarSystem Sun=700000,/太阳半径 Earth=6380,/地球赤道半径 Moon=1740/月亮半径,(3)枚举使用一个基本类型来存储,在默认情况下,该类型为int,在枚举声明中添加类型,就可以指定其它基本类型:enum orientation:byte north=1,sorth=2,east=3,west=4,(4)声明与访问枚举变量有了枚举类型后,可以使用它来声明枚举变量 WeekDays day=WeekDays.Thursday;/使用WeekD

13、ays.Thursday来访问枚举元素,并用枚举元素初始化枚举变量还可以使用整型值为枚举变量赋值,但必须进行显示转换.当然也可以将枚举元素显式转换为整型数。WeekDays day=(WeekDays)3;Console.WriteLine(int)WeekDays.Thursday);看一个例子,思考,新建一个控制台程序,实现如下功能:1)north2)south3)east4)westPlease select a direction:Please input a distance:当你用键盘输入比如1时,则屏幕会自动输出:north,接着从键盘输入一个距离,随后屏幕也会显示你所输入的距离

14、。注意:最好用枚举和结构类型来实现此题,以进一步熟悉枚举和结构类型的用法。,2.2 引用类型,引用类型继承自Object。引用类型存储的是对实际数据内存地址的引用,当两个引用类型变量引用同一内存中的数据时,对其中一个引用类型变量进行操作会影响另一个引用类型变量。引用类型包括类、接口、委托、数组、字符串等。,1 类C#中经常用到两个类:object和string 对于object类型,它是所有其他类型的基类,一个object类型的变量可以赋予任何类型的值。对于string类型,它表示由0个或多个unicode字符构成的一组字符序列。2 接口 接口好比一种模板,这种模板定义了实现接口的对象必须实现

15、的方法,其目的就是让这些方法可以作为接口实例被引用。3 委托 C#中,委托是引用类型,它是完全面向对象的 4 数组,new 操作符,new操作符用于创建一个新的类型实例。它有三种形式:对象创建表达式,用于创建一个类类型或值类型的实例。数组创建表达式,用于创建一个数组类型实例。代表创建表达式,用于创建一个新的代表类型实例。例:int int_arr=new int10;Program t1=new Program();,as 操作符,as运算符用于在兼容的引用类型之间执行转换。实际上as运算符就是一个强制类型转换,如果转换不成功,则返回null。例:object x=“10”;string y=

16、x as string;Console.WriteLine(“0,1”,y.GetType(),y);,is操作符,is操作符用于动态检查对象的运行时类型是否与给定类型兼容,如果兼容,则返回true,否则返回false。例:object z=“123”;if(z is string)Console.WriteLine(“z is a string.”);,sizeof 操作符,sizeof操作符用于获得值类型的大小。(以字节为单位)使用方法:sizeof(类型)例:Console.Write(sizeof(double);,typeof 操作符,typeof操作符用于获取某一数据类型的预定义结

17、构类型。使用方法:typeof(类型)若要获得一个变量或表达式的类型,必须使用GetType().例:int x=10;Console.WriteLine(typeof(int);Console.Write(x.GetType();,数组1 数组概述数组是一些具有相同类型的数据按一定顺序组成的序列,数组中的每一个数据都可以通过数组名及唯一一个索引号(下标)来存取。所以,数组用于存储和表示既与取值有关,又与位置(顺序)有关的数据。数组元素可以是任何类型。,数组对数组元素的访问是通过数组下标来实现的。(下标从0开始计数)在C#中,数组分为:一维数组,多维数组和交错数组,一维数组1.数组的定义与初始

18、化 数据类型 数组名=new 数据类型元素个数 如:int a=new int5;2.也可以在定义数组的同时进行初始化 数据类型 数组名=new 数据类型元素个数初始化列表 如:inta=new int210,20;intb=new int10,20;intb=10.20;,一维数组在使用数组类型时,应注意:在定义一个数组的时候,方括号必须跟在数据类型的后面,而不能跟在数组名后面;先声明数组,再初始化时必须使用new运算符,不能省略。如:int d;d=1,2,3;,一维数组3.访问数组元素 通过数组下标找到数组元素,可以为数组元素赋值,也可以修改数组元素的值。如:string c=“one”

19、,”two”,”three”;double scores=83,78.5,92;scores1=79;string str=c1;,例题,定义一个数组,求最大数和最小数(见例子),多维数组,1.二维数组的定义与初始化 数据类型维数1,维数2 数组名=new 数据类型一维元素个数,二维元素个数如:int,a=new int2,2;2.有两种方式对二维数组进行初始化 如:int,a=new int,1,2,3.4;int,b=1,2,3.4;,多维数组,如果维数超过两个,则称为多维数组。定义方式类似二维数组。看一个二维数组的例子,交错数组,一般使用交错数组存储稀疏矩阵。交错数组是指数组的元素又是一

20、个数组,它与多维数组不同,它的维数和大小可以不相同。交错数组的定义形式:数据类型 维数1维数2 数组名=new 数据类型一维元素个数;如:int a=new int 3;注意:交错数组必须初始化后才可以使用。,隐式类型数组,定义数组时,可以不指定类型,类型是从数组初始化列表中的元素推断而来的。隐式数组的定义形式:var 数组名=new 初始化列表;var a=new 1,10,100,1000;var b=newnew1,2,3,4,new5,6,7,8;注意:隐式类型数组只支持一维数组,不支持隐式类型多维数组。,array类常用属性和方法(1)Length属性,数组的长度(2)Rank属性,

21、获得数组维数(3)Copy()方法,复制数组(4)Sort()方法,排序数组(5)GetLength()方法:用于获取指定维的长度还可以使用一种更有弹性的方法来获取数组的所有元素,即foreach循环。,foreach循环,foreach循环可以使用一种简便的方法来定位数组中的每个元素:foreach(类型 迭代变量 in 集合表达式)但需要注意的是这种方法只能对数组内容进行只读访问,所以不能改变任何元素的值。演示实例,foreach循环,foreach也可以访问多维数组中的所有元素,其方式与访问一维数组相同。如:Double,hillHeight=1,2,3,4,2,3,4,5,3,4,5,

22、6;foreach(double height in hillheight)Console.WriteLline(“0”,height);,字符串1.字符串声明和引用 它有两种表达方式:1)用string 关键字声明的一组内容放在双引号中 string s=“Hello Word!”;2)用引起来,它可以把字符串中的特殊字符的特殊性去掉,字符串中的所有字符均被认为是普通字符。string DirName=”c:windows”;,处理字符串,2.关键字string拥有大量处理字符串的方法1)string类型变量可以看作是char变量的只读数组。为了获得一个可写的char数组,可以使用ToCha

23、rArray()命令:string mystring=“a string”;char mychars=mystring.ToCharArray();foreach(char character in mychars)Console.WriteLine(“0”,character);演示一个例子:,处理字符串,2).获取字符串的长度(Length属性)如:string str=“my name is lili!”;Console.WriteLine(str.Length);3).连接两个字符串(“+”或Concat方法)如:string a=“this”;string b=“is a test.

24、”,string c=a+b;/string c=string.Concat(a,b);注意:字符串连接符不同于算术运算符,处理字符串,4).取子串(Substring方法)public string Substring(int startIndex)public string Substring(int startIndex,int length)startIndex:子字符串的起始位置,length:子串长度 如:string a=“this is a test.”;string c=a.Substring(5,2);5).查找字符或子串在字符串中的位置(IndexOf方法)int Ind

25、exOf(char value,int startIndex,int count)int IndexOf(string value,int startIndex,int count)与这个方法相对应的,还有一个LastIndexOf()方法,它是从字符串的后面向前搜索。,6).比较字符串的方法(Equals方法/Compare方法/=/!=)string a=“this”;Console.WriteLine(“0”,a.Equals(“this”);Console.WriteLine(“0”,string.Compare(a,“this”);,处理字符串,7).字符串转换全部转换成大写,str

26、ing theString=“Hello World!”;string upperString=theString.ToUpper();Console.WriteLine(theString);Console.WriteLine(upperString);,处理字符串,Hello World!HELLO WORLD!,7).字符串转换全部转换成小写,string theString=“Hello World!”;string lowerString=theString.ToLower();Console.WriteLine(theString);Console.WriteLine(lowerS

27、tring);,处理字符串,Hello World!hello world!,7).字符串转换使用字符串转换来忽略大小写,练习下:让用户从控制台输入用户名和密码都为小写,只有当用户名为“SOMEBODY”和密码为”test”时,控制台才会显示“欢迎进入主界面”,否则显示“错误信息”。,处理字符串,Console.Write(“User name:“);string username=Console.ReadLine();Console.Write(“Password:“);string password=Console.ReadLine();if(username.ToUpper()=“SOM

28、EBODY”,7).字符串转换使用.Trim()来调整字符串,使之去除掉左右空格。,string theString=“Hello world!”;string trimString=theString.Trim();Console.WriteLine(“|”+theString+”|”);Console.WriteLine(“|”+trimString+”|”);,处理字符串,|Hello world!|Hello world!|,7)字符串转换综合示例,处理字符串,Console.Write(“User name:“);string username=Console.ReadLine().

29、Trim().ToLower();Console.Write(“Password:“);string password=Console.ReadLine();if(username=“some”,7)字符串转换使用 Trim 可以去掉以指定字符开头或结尾的字符,直到遇到非指定的字符为止:,处理字符串,.Trim(new char 要去掉的字符列表);,Console.Write(Continue?);string userResponse=Console.ReadLine();char trimChars=,e,s;userResponse=userResponse.Trim(trimChar

30、s).ToLower();if(userResponse=y)Console.WriteLine(继续);,当要去掉的字符数组为,_,时,转换如下:“Hello_world_”=“Hello_world”“_ _ Hello_ _world”=“Hello_ _world”注!Trim 方法只会去掉以指定字符开头或结尾的字符,而不会去掉其它地方的字符!,7)字符串转换使用 TrimStart 去掉字符串开头的指定字符,处理字符串,.TrimStart(new char 要去掉的字符列表);,Console.Write(“Input a string:“);string inputString=

31、Console.ReadLine();inputString=inputString.TrimStart(new char);Console.WriteLine(“Trim string is 0”,inputString);,Input a string:Hi,all!Trim string is Hi,all!,7)字符串转换使用 TrimEnd 去掉字符串结尾的指定字符:,处理字符串,.TrimEnd(new char 要去掉的字符列表);,Console.Write(“Input a string:“);string inputString=Console.ReadLine();inp

32、utString=inputString.TrimEnd(new char _);Console.WriteLine(“Trim string is 0”,inputString);,Input a string:Hi,all!_Trim string is Hi,all!,7)字符串转换使用 PadLeft或PadRight在字符串左边或右边添加指定数量的空格:,处理字符串,.PadLeft();.PadRight();,Console.Write(“|”+“Hello”.PadLeft(10);Console.Write(“World”.PadRight(10)+”|”);,|Hello

33、World|,7)字符串转换使用 PadLeft或PadRight在字符串左边或右边添加指定数量的指定字符:,处理字符串,.PadLeft(,);.PadRight(,);,Console.Write(“|”+“Hello”.PadLeft(10,#);Console.Write(“World”.PadRight(10,#)+”|”);,|#Hello World#|,8)字符串分割可以使用 Split 把字符串按指定的字符分割成字符串片断。,处理字符串,.Split(new char 分割字符列表);,string splitString=“Hello world”.Split(new ch

34、ar);foreach(string subString in splitString)Console.WriteLine(subString);,Helloworld,从文件中获得数据,练习:模拟从文件中读出一个学生的三门成绩,文件定义成字符串形式,如下所示:string scoreString=100|89|70;试编程实现读取这三门成绩,并依次输出。,/从文件中读出一个学生三门成绩 string scoreString=100|89|70;string scores=scoreString.Split(new char|);foreach(string score in scores)C

35、onsole.WriteLine(score);,9)替换字符或字符串使用 Replace(,)可以用来把字符中的原字符串替换成新字符串。,处理字符串,.Replace(,);,string theString=“Hello world!”;theString=theString.Replace(“!”,“from C#!”);Console.WriteLine(theString);,Hello world from C#!,10)删除子字符串使用 Remove()可以删除从指定位置开始到字符串末尾的子字符串,处理字符串,.Remove();,string theString=“Hello

36、world!”;theString=theString.Remove(5);Console.WriteLine(theString);,Hello,10)删除子字符串使用 Remove(,)可以删除从指定位置开始到指定长度的子字符串。,处理字符串,.Remove(,);,string theString=“Hello world!”;theString=theString.Remove(5,6);Console.WriteLine(theString);,Hello!,11)插入字符串使用 Insert(,)可以在指定位置插入子字符串。,处理字符串,.Insert(,);,string the

37、String=“Hello world!”;theString=theString.Insert(theString.Length-2,“from C#”);Console.WriteLine(theString);,Hello world from C#!,12)检查字符串中是否包含子字符串使用 Contains()可返回字符串中是否包含子字符串。,处理字符串,.Contains();,string theString=“Hello world!”;bool isContainHello=theString.Contains(“Hello”);Console.WriteLine(isCont

38、ainHello);,True,处理字符串,再看一个例子,来进一步了解字符串方法的应用,DateTime结构,.NET框架类库中的DateTime结构用于表示日期和时间,它可以表示公元0001年1月1日午夜12:0:0到公元9999年12月31日晚上11:59:59之间的日期和时间。DateTime结构中的成员:1.获取当前日期和时间使用DateTime结构中的Now属性可以获取当前系统的日期和时间使用DateTime结构中的Today属性可以获取当前系统的日期如:DateTime date=DateTime.Now;DateTime day=DateTime.Today;还可以指定特定的日期

39、和时间:如:DateTime day=new DateTime(2010,3,21);,DataTime结构,2.获取年、月、日使用DataTime结构中的Date属性可以获取DataTime的日期部分。使用DataTime结构中的Year属性、Month属性、Day属性可以获取日期中的年份、月份、日(返回类型为整型)如:DataTime day=DateTime.Today;int y=day.Year;int m=day.Month;int d=day.Day;使用DataTime结构中的DayOfWeek属性可以根据日期计算出该日期对应的星期。如:DataTime day=DateTim

40、e.Today;Console.WriteLine(day.DayOfWeek);,DataTime结构,3.获取时、分、秒使用DataTime结构中的Hour属性、Minute属性、Second属性可以获取日期中的小时数、分钟数和秒数。(返回类型均为整型)如:DataTime day=DateTime.Now;int h=day.Hour;int m=day.Minute;int s=day.Second;,DataTime结构,-4.将日期转换为字符串使用DataTime结构中的ToLongDateString、ToLongTimeString方法可以把DateTime转成字符串,且以长格

41、式表示日期或时间。使用DataTime结构中的ToShortDateString、ToShortTimeString方法可以把DateTime转成字符串,且以短格式表示日期或时间。DataTime day=DateTime.Today;Console.WriteLine(day.ToLongDateString();Console.WriteLine(day.ToShortTimeString();,思考,设计一个控制台应用程序,将当前时间转换为秒数。,2.5 表达式和运算符 C#中的表达式类似于数学运算中的表达式,是由操作数和运算符组成的。操作数可以是一个变量、常量或者另外一个表达式,运算符

42、指明了作用于操作数的操作方式。运算符大致分为3类,一元运算符(一个操作数)、二元运算符(两个操作数)和三元运算符(三个操作数)。,算数运算符一元运算符,二元运算符,前置和后置自加/自减运算符,位运算符x=6,y=10,操作符优先级,温馨提示,在输写运算符时,就在其两侧添加空格,以增加代码的清晰度。y=x*3+5;一元操作符和操作数之间不留空格。例:i+,思考,设计一个控制台应用程序,如果有两个整数存储在变量var1,var2中,该进行什么样的布尔测试,看看其中的一个是否大于10?设计一个控制台应用程序,运用条件运算符实现将小写字母转换成大写字母。,类型转换,类型转换的概念数据在计算机中是以二进

43、制位的形式表示的,程序设计语言可根据数据的类型来对这些二进制位进行解释,进而控制数据的显示和运算,同一串二进制位,不同的数据类型对它有不同的解释。就比如说,同一串二进制位,在char 类型中表示字符 A,而在 ushort 中却表示数值 65(字符串A的ASCII码值)。,类型转换,类型转换是指将变量从一种类型转换成另一种类型。在 C#中,类型转换有两种形式:隐式转换:当从类型A到类型B的转换,不会造成数据的丢失时,将由编译器自动进行隐式类型的转换。显式转换:当从类型A到类型B的转换,可能造成使数据的丢失时,就必需进行显式类型转换。,类型转换,隐式类型转换隐式类型转换是由编译器自动完成的,不需

44、要做任何工作,考虑如下代码:当变量 var2 所能表示的所有值,都在变量 var1 的取值范围内,将由编译器自动进行隐式类型的转换。,var1=var2;,类型转换,隐式类型转换示例:char 和 ushort 的值是可以互换的,它们都能表示65536种不同值,所以将由编译器自动进行隐式类型的转换,考虑如下代码:,char sourceVar=aushort destinationVar=sourceVar;Console.WriteLine(“sourceVar val:0”,sourceVar);Console.WriteLine(“destinationVar val:0”,destin

45、ationVar);,sourceVar val:adestinationVar val:97,类型转换,隐式类型转换:隐式类型转换的规则:任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可进行类型A到类型B的隐式类型转换。,byte isByte=65;char isChar=isByte;ushort isUShort=isChar;int isInt=isUShort;long isLong=isInt;float isFloat=isLong;double isDouble=isFloat;,隐式转换注意事项 1.转换规则是由低精度的数据自动向高精度的数据进行转换。2.允许数

46、值范围小的类型向数值范围大的类型转换,允许无符号整数类型向有符号整数类型转换。3.隐式转换包括:标识转换、隐式数值转换、隐式枚举转换、隐式引用转换、装箱转换、隐式常数表达式转换和用户自定义的隐式转换。4.隐式枚举转换允许十进制0转换成任何枚举类型,其他类型不存在这种转换。如:enum WeekDaySun,Mon,Tue,Wed,Thu,Fri,Sat WeekDay days;Days=0;,类型转换,显式类型转换当需要进行的转换可能会造成数据的丢失,也就是说当类型B所能表示的值范围超出了类型B所能表示值的范围,就无法进行隐式类型的转换,这时必须手工进行显示的类型转换,否则,将不能通过编译,

47、如:,int isInt=16;byte isByte=isInt;,编译器将给出错误提示:无法将类型“int”隐式转换为“byte”。,类型转换,显式类型转换显式类型转换的语法:,var1=(目标类型)var2;,byte destinationVar;short sourceVar=7;destinationVar=(byte)sourceVar;Console.WriteLine(“sourceVar val:0”,sourceVar);Console.WriteLine(“destinationVar val:0”,destinationVar);,类型转换,显式类型转换示例比较转换与

48、不转换的结果:,static void Main(string args)int numA=1,numB=2;float result1,result2;result1=numA/numB;result2=(float)numA)/(float)numB);Console.WriteLine(“Not explicit convert result is:0”,result1);Console.WriteLine(“Explicit converted result is:0”,result2);,Not explicit convert result is:0Explicit convert

49、ed result is:0.5,类型转换,显式类型转换进行显式类型转换时,当被转换变量的值大于目标类型所能表示值的范围时,将会造成数据溢出:,static void Main(string args)short sourceVar=281;byte destinationVar=(byte)sourceVar;Console.WriteLine(“Number 281 in byte is:0”,destinationVar);,Number 281 in byte is:25,类型转换,显式类型转换,short 型数据 281 在内存中的二进制表示为00000001 00011001而 b

50、yte 只能存储8位二进制数,故只能保存最低8位,即00011001所以,281在 byte 型数据中表示为25。,类型转换,显式类型转换为了防止溢出现象的发生,在 C#中加入 checked 和 unchecked 两个运算符。1.checked-检查运算的结果,如果运算溢出,将会由CLR抛出一个OverflowException类型的异常。2.unchecked-不对运算的结果进行检查,即便数据溢出也不作处理,这也是 C#的默认行为,用法:,var1=checked(表达式);var1=unchecked(表达式);,类型转换,显式类型转换 checked 运算符示例:,static vo

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号