C#教学课件Cha1.ppt_第1页
C#教学课件Cha1.ppt_第2页
C#教学课件Cha1.ppt_第3页
C#教学课件Cha1.ppt_第4页
C#教学课件Cha1.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C#数据类型 (续),C#程序设计,数据类型在一定的条件下是可以相互转换的,C#允许使用两种转换方式:,2.3,(1)隐式转换 (2)显式转换,隐式转换 隐式转换是系统默认的,不需要加以声明就可以进行转换。在隐式转换过程中,编译器不需要对转换进行详细检查就能安全地执行转换。,2.3,低精度数值类型高精度数值类型,隐式转换,隐式转换,2.3,转化形式:var1 = var2,long l; int i=10; l=i; /隐式转换 Console.WriteLine(“l=0, i=1”,l,i);,输出:l=10,i=10,using System; namespace P2_10 class LossingConversionSample public static void Main() long l = long.MinValue; Console.WriteLine(“l=0“,l); double d = l; /隐式转换 Console.WriteLine(“d=0“,d); l = (long)d; /显式转换 Console.WriteLine(“l=0“,l); Console.ReadLine(); ,隐式转换,低精度向高精度转换通常是安全的,但有时候也会发生信息丢失,不是指数值的大小改变,而是数值的精度会降低,char类型与ushort类型存在一一对应关系。,隐式转换,char ch=A; ushort s=ch; int i=ch; Console.WriteLine(“ch=0, s=1,i=2”,ch,s,i);,输出: ch=A, s=65,i=65,显式转换 显式转换又叫强制类型转换,需要用户明确指定转换类型。一般在不存在该类型的隐式转换时才使用。格式如下: var1 = (NewType)var2,2.3,高精度数值类型低精度数值类型:显式转换 精度相同的有符号和无符号数值类型之间的转换:显式转换 数值类型 char类型:显式转换,显式转换,显式转换,2.3,var1 = (NewType)var2,Console.WriteLine(“b=0, s=1”, b, s);,byte b;,short s= 10;,b = s; /隐式转换?,显式转换,2.3,var1 = (NewType)var2,Console.WriteLine(“b=0, s=1”, b, s);,byte b;,short s= 10;,b =(byte) s; /显式转换,输出:b=10,s=10,显式转换,2.3,var1 = (NewType)var2,Console.WriteLine(“b=0, s=1”, b, s);,byte b;,short s= 300;,b =(byte) s; /显式转换,输出:b=44,s=300 /运行结果因溢出而出错!,显式转换,2.3,var1 = (NewType)var2,Console.WriteLine(“b=0, s=1”, b, s);,byte b;,short s= 300;,b =checked(byte) s); /显式转换 增加溢出检查表达式checked,显式转换,2.3,显式转换,2.3,var1 = (NewType)var2,Console.WriteLine(“b=0, s=1”, b, s);,byte b;,short s= 300;,b =unchecked(byte) s); /显式转换 增加溢出检查表达式checked,输出:b=44,s=300 /运行结果因溢出而出错!,枚举转换 隐式转换:把0直接赋给枚举类型的变量 显式转换 整数类型(包括字符类型)和实数类型枚举类型 枚举类型枚举类型,2.3,using System; namespace P2_12 class EnumConversionSample public static void Main() Weekday day1=0; /隐式转换 Console.WriteLine(day1); day1=(Weekday)1; /显式转换 不能写成:day=1; Console.WriteLine(day1); day1=(Weekday)2.5F; /显式转换 Console.WriteLine(day1); Weekday day2; day2=(Weekday)day1; /显式转换 不能写成 day2=day; Console.WriteLine(day2); int i=(int)day2; /显式转换 Console.WriteLine(i); float f=(float)day2; /显式转换 Console.WriteLine(f); enum Weekday Sun,Mon,Tue,Wed,Thu,Fri,Sat ,枚举转换,Convert类,Convert类位于System命名空间中,主要用于将一个值类型转换成另一个值类型,其语法格式: public sealed class Convert,Convert类中用于实现类型转换的方法都是静态方法(静态方法只能通过类名访问,不能通过类的实例访问),可通过 ”Convert.方法名(参数)“使用,常见方法如表所示:,Convert类,Convert类,Convert类,int i; string str = “123”; i = Convert.ToInt32(str ); Console.WriteLine(“str=0, i=1”, str, i);,输出: str=123, i=123,Convert类,int i; string str = “123dd”; i = Convert.ToInt32(str ); Console.WriteLine(“str=0, i=1”, str, i);,如果参数格式不符合要求,则引发参数格式异常(FormatException)。,Convert类,Parse方法,C#中的很多类型(特别是值类型)都定义了字符串解析的基本方法,这个方法就是Parse方法。,如:Boolean.Parse 方法 的定义如下: public static bool Parse( string value ),Parse方法是静态的,且返回值类型就是该方法所属的类型。,Parse方法只有一个String类型的参数,如:Int32.Parse 方法的定义如下: public static int Parse( string s ),Parse方法,int a, b, sum; Console.Write(“a=“); a = int.Parse(Console.ReadLine(); Console.Write(“b=“); b = int.Parse(Console.ReadLine(); sum = a + b; Console.WriteLine(“a+b=0“, sum); Console.ReadLine();,Parse方法,bool b=bool.Parse(“True“); int i=int.Parse(“5“); double d=double.Parse(“2.5“); DateTime dt=DateTime.Parse(“2011-9-12“); Console.WriteLine(“b=0, i=1, d=2, dt=3“, b, i, d, dt); Console.ReadLine();,Parse方法,如果参数格式不符合要求,则引发参数格式异常(FormatException)。,TryParse方法,TryParse是Parse方法的替代方法,通常有两个参数,一个表示要解析的字符串,而另一个是输出参数,用于存放解析结果;方法返回一个布尔值,用于指示解析是否成功。,int x,y; int.TryParse(“5“,out x); /返回? x=? int.TryParse(“2.5”,out y); /返回? y=? double d; double.TryParse(“2.5”,out d); /返回? d=? DateTime dt1,dt2; DateTime.TryParse(“2011-9-12”,out dt1); /返回? DateTime.TryParse(“2011-9-31”,out dt2); /返回? Console.WriteLine(“x=0, y=1, d=2, dt1=3,dt2=4“, x, y, d, dt1, dt2); Console.ReadLine();,TryParse方法,TryParse方法,TryParse可以提高程序的可靠性。,int x; Console.Write(“请输入整数x的值:”); while( ! int.TryParse(Console.ReadLine(),out x) Console.WriteLine(“输入格式不正确!请重新输入x的值”); ,用户也可以为自定义的类型提供Parse和TryParse方法。,引用转换 引用转换包括类之间、接口之间、类与接口之间、委托之间、数组之间的类型转换。 所有的引用转换都可以视为类之间以及类和接口之间的转换。(为什么?) 任何引用转换都不会修改对象的内容,也不会有信息的丢失。(为什么?) 引用转换也有隐式引用转换和显式引用转换两种。,2.3,2.3,引用类型引用类型 派生类型基础类型:隐式转换 基础类型派生类型:显式转换 空引用值Null可赋给任何一种引用类型的变量。 数组(A1A2) A1和A2维数相同 A1和A2的数组元素都是引用类型 存在从A1数组元素类型向A2数组元素类型的隐式(或显式)引用转换。,int i = 123; object o = i; /装箱可执行隐式或显式转换 int j = (int) o; /拆箱转换必须执行显式转换,i: 123,o,System.Int32,装箱,j:,123,System.object,123,拆箱,System.Int32,值类型引用类型 值类型引用类型:隐式转换(装箱转换) 引用类型值类型:显式转换(拆箱转换),2.4,Object o=2.5 /装箱可执行隐式或显式转换 int i=(int)o; /拆箱转换必须执行显式转换 double d = (double) o;,o,i:,2.4,如果被拆箱的Object类型的值为空null,或者与目标值类型冲突,拆箱转换都会失败,引发异常。,2.5,d: 2.5,A. Object o; int i=(int)o;,2.4,如果被拆箱的Object类型的值为空null,或者与目标值类型冲突,拆箱转换都会失败,引发异常。,以下拆箱转换语句中,正确的有( )?,B. Object o=10.5; int i=(int)o;,C. Object o=10.5; float f=(float)o;,D. Object o=10.5; float f=(float)(double)o;,本章小结,C#中的数据类型分为值类型和引用类型,其中值类型又包括整数、布尔、实数、结构、枚

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论