收藏 分销(赏)

第4章-类型转换和命名空间.ppt

上传人:快乐****生活 文档编号:2669403 上传时间:2024-06-04 格式:PPT 页数:29 大小:358.50KB
下载 相关 举报
第4章-类型转换和命名空间.ppt_第1页
第1页 / 共29页
第4章-类型转换和命名空间.ppt_第2页
第2页 / 共29页
第4章-类型转换和命名空间.ppt_第3页
第3页 / 共29页
第4章-类型转换和命名空间.ppt_第4页
第4页 / 共29页
第4章-类型转换和命名空间.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、学习学习目标目标v正确完成隐式和显式转换;正确完成隐式和显式转换;v理解和掌握装箱和拆箱操作;理解和掌握装箱和拆箱操作;v合理利用命名空间来组织应用程序的结构;合理利用命名空间来组织应用程序的结构;v声明和引用命名空间,利用别名来简化编程。声明和引用命名空间,利用别名来简化编程。第第四四章章类类型型转转换换和和命命名名空空间间24.1 类型转换C#C#中数据类型的转换可以分为两种形式:隐式转换和显式转换。中数据类型的转换可以分为两种形式:隐式转换和显式转换。第第四四章章类类型型转转换换和和命命名名空空间间4.1.1 隐式转换隐式转换【学一学】v隐式转换可以分为数值类型隐式转换、枚举类型隐式转换

2、和引用类型隐式转换,下面介绍前两种,而引用类型隐式转换将在单独的章节进行介绍。v1.数值类型隐式转换下表4-1列出了C#支持的数值类型隐式转换。转换前的类型转换后的类型sbyteShort,int,long,float,double,decimalbyteShort,ushort,int,uint,long,ulong,float,double,decimalshortInt,long,float,double,decimalushortInt,uint,long,ulong,float,double,decimalintLong,float,double,decimaluintLong,ul

3、ong,float,double,decimalLong,ulongFloat,double,decimalfloatdoublecharUshort,int,uint,long,ulong,float,double,decimal表4-1 C中的数值类型隐式转换34.1 类型转换第第四四章章类类型型转转换换和和命命名名空空间间4.1.1 隐式转换隐式转换v从表4-1可以看出,数值类型隐式转换实际上就是从低精度的数值类型到高精度的数值类型的转换。换句话说,就是从“小类型”到“大类型”或者是从无符号整数到有符号整数的转换。以下代码说明了这种形式的转换。byte x=16;Console.Writ

4、eLine(x=0,x);ushort y=x;Console.WriteLine(y=0,y);y=65535;Console.WriteLine(y=0,y);float z=y;Console.WriteLine(z=0,z);上述代码的运行结果如下:x=16;y=16;y=65535;z=65535;44.1 类型转换第第四四章章类类型型转转换换和和命命名名空空间间4.1.1 隐式转换隐式转换v2.2.枚举类型隐式转换枚举类型隐式转换 枚举类型隐式转换允许把十进制整数0转换成任何枚举类型,而其它的整数则不允许这种隐式转换。例如,WeekDay是一个定义的代表星期的枚举类型,下列代码就说

5、明了枚举类型的隐式转换。Weekday day;day=0;Console.WriteLine(day);上述代码能正确编译并运行,如果将代码中的第2行更改为:day=1;则编译会出错,因为非十进制整数0不存在枚举类型隐式转换。54.1 类型转换第第四四章章类类型型转转换换和和命命名名空空间间4.1.2 显示转换显示转换【学一学】v显式类型转换,又叫强制类型转换。与隐式转换正好相反,显式转换需要用户明确地指定转换的类型。显式类型转换的语法格式如下:v类型 变量1=(转换后的类型)变量2;v通过上述格式,编译器可以将右侧的值转换为括号中指定的数据类型,例如:vint x=500;vshort z

6、=(short)x;/显式转换为short,z值为500v显式转换可以分为数值类型显式转换、枚举类型显式转换和引用类型显式转换,下面只介绍前两种。v数值类型显式转换数值类型显式转换 数值类型显式转换是指当不存在相应的隐式转换时,将一种数值类型转换成另一种数值类型。下表4-2列出了C#支持的数值类型显式转换。转换前的类型转换后的类型sbyteByte,ushort,uint,ulong,charbyteSbyte,charshortSbyte,byte,ushort,uint,ulong,charushortSbyte,byte,short,charintSbyte,byte,short,ush

7、ort,uint,ulong,charuintSbyte,byte,short,ushort,int,charlongSbyte,byte,short,ushort,int,uint,ulong,charulongSbyte,byte,short,ushort,int,uint,long,charcharSbyte,byte,shortfloatSbyte,byte,short,ushort,int,uint,long,ulong,char,decimaldoubleSbyte,byte,short,ushort,int,uint,long,ulong,char,float,decimalde

8、cimalSbyte,byte,short,ushort,int,uint,long,ulong,char,float,double64.1 类型转换第第四四章章类类型型转转换换和和命命名名空空间间4.1.2 显示转换显示转换v枚举类型显式转换枚举类型显式转换 枚举类型显式转换实际上是枚举类型的元素类型与相应类型之间的隐式或显式转换。比如,有一个元素类型为int的枚举类型E,则当执行从E到byte的枚举类型显式转换时,实际上是执行从int到byte的数值类型显式转换;当执行从byte到E的枚举类型显式转换时,实际上是执行从byte到int的数值类型隐式转换。下列代码是对整数3进行枚举类型显式转

9、换,其中WeekDay是一个定义好的代表星期的枚举类型 Weekday day;day=(Weekday)3;Console.WriteLine(day);程序编译没有错误,运行结果如下:374.1 类型转换第第四四章章类类型型转转换换和和命命名名空空间间4.1.3 引用类型转换引用类型转换【学一学学一学】v引用类型转换包括类之间、类与接口之间、接口之间、委托之间,以及数组之间的类型转换。由于引用类型的变量只是保存对目标对象的引用,因此任何引用转换都不会修改对象的内容,也就不会有信息丢失。v引用类型转换分为隐式和显式转换两种。1.引用类型隐式转换 引用类型隐式转换包括以下几种:从任何引用类型到

10、对象类型的转换。从类类型S到类类型T的转换,其中S是T的派生类。从类类型S到接口类型T的转换,其中类S实现了接口T。从接口类型S到接口类型T的转换,其中T是S的父接口。从元素类型为Ts的数组类型S向元素类型为Tt的数组类型T的转换。84.1 类型转换第第四四章章类类型型转转换换和和命命名名空空间间4.1.3 引用类型转换引用类型转换v例如,假设类ChildClass是类ParentClass的派生类,下列代码就实现了父类和派生类对象之间的隐式类型转换。ParentClass class1_arr=new ParentClass 10;ChildClass class2_arr=new Chil

11、dClass 10;class1_arr=class2_arr;2.引用类型显式转换 引用类型显式转换包括:从对象到任何引用类型的转换。从类类型S到类类型T的转换,其中S是T的基类。从基类型S到接口类型T的转换,其中S不是密封类,而且没有实现T。从接口类型S到类类型T的转换,其中T不是密封类,而且没有实现S。从接口类型S到接口类型T的转换,其中S不是T的子接口。从元素类型为Ts的数组类型S到元素类型为Tt的数组类型T的转换。引用类型不论隐式还是显式转换,虽然可能会改变引用值的类型,却不会改变值本身。94.1 类型转换第第四四章章类类型型转转换换和和命命名名空空间间4.1.4 装箱和装箱和拆箱拆

12、箱【学一学学一学】v通过前面的学习,我们知道数值类型之间、引用类型之间是如何进行类型转换的。如果想在值类型和引用类型之间进行转换,那么在C#中能不能完成此功能呢?答案是肯定的,这就涉及到装箱和拆箱操作。v装箱和拆箱机制使得在C#类型系统中,任何值类型、引用类型之间都可以进行转换。1.装箱 装箱是指将一个值类型隐式地转换成一个对象类型,或者把这个值类型转换成一个被该值类型应用的接口类型。把一个值类型的值装箱,也就是创建一个object实例并将这个值复制给这个object,例如:int i=10;object obj=i;也可以用显式的方法来进行装箱操作,将上述代码也可以改写为:int i=10;

13、object obj=object(i);104.1 类型转换第第四四章章类类型型转转换换和和命命名名空空间间4.1.4 装箱和装箱和拆箱拆箱【试一试试一试】任务任务4-14-1:将一个整型变量进行装箱操作,操作完毕后改变整型变量的值,然后输出整型变量和对象变量的值;再改变对象变量的值,然后输出整型变量和对象变量的值,比较两次输出的值的变化。解决思路:1.定义一个整数变量并赋值;2.将整型变量的值赋给一个对象类型的变量;3.改变整型变量的值,并输出两变量的值;4.改变对象变量的值,并输出两变量的值。完成步骤:1.创建一个名为“Chapter4_1”的控制台应用程序。2.在Program.cs文

14、件的主方法Main中编写如下代码:114.1 类型转换第第四四章章类类型型转转换换和和命命名名空空间间4.1.4 装箱和装箱和拆箱拆箱 static void Main(string args)int i=50;object obj=i;/装箱操作 i=100;/改变i的值 Console.WriteLine(“i=0,obj=1,i,obj);/输出两变 量的值 obj=200;/改变obj的值 Console.WriteLine(i=0,obj=1,i,obj);3.编译和执行程序。按“Ctrl+F5”组合健,执行程序,运行结果如图4.1所示。图4.1 两次输出的变量的值 124.1 类型

15、转换第第四四章章类类型型转转换换和和命命名名空空间间4.1.4 装箱和装箱和拆箱拆箱 从图4.1可以看出:当改变i的值时,obj的值并没有变化;反之obj的值改变时,i的值也没有受到影响。所以通过装箱操作,可以把一个值类型的变量的值复制给一个对象类型的实例,而被装箱的值类型变量自身的值是不会受到装箱的影响。2.2.拆箱拆箱 拆箱和装箱正好相反,拆箱是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口的值类型。例如:int i=20;object obj=i;/装箱操作 int j=(int)obj;/拆箱操作 需要注意的是,被装箱过的对象才能被拆箱。可以看出拆

16、箱过程正好是装箱过程的逆过程。必须注意,装箱转换和拆箱转换必须遵循类型兼容的原则。134.2 命名空间第第四四章章类类型型转转换换和和命命名名空空间间4.2.1 命名空间的声明命名空间的声明【学一学】vC#中使用命名空间来管理和组织各种类,它是一个逻辑上的类型组织结构,利用它来对程序中的类进行逻辑上的分组,并使定义在同一命名空间中的类能相互访问。显然,在C#中可以使用命名空间来解决类的命名冲突的问题,C#中命名空间是通过关键字namespace来声明的,其语法格式如下:namespace 命名空间名 /命名空间的成员(可以是其它命名空间或定义的类)v例如在一个项目中有一个类文件MyNamesa

17、pce.cs,内容如下:namespace chapter4 class Student /添加Student类的成员变量和成员方法144.2 命名空间第第四四章章类类型型转转换换和和命命名名空空间间4.2.1 命名空间的声明命名空间的声明 class Teacher /添加Teacher类的成员变量和成员方法 v上述代码通过关键字namespace声明了一个命名空间chapter4,注意:命名空间名要符合变量名的命名规则。在该命名空间中包含Student和Teacher两个类。v现在向项目中再添加一个名为“YourNamespace.cs”的类文件,该文件的内容如下:namespace ch

18、apter4 class Person Student lisi;Teacher zhangsan 154.2 命名空间第第四四章章类类型型转转换换和和命命名名空空间间4.2.1 命名空间的声明命名空间的声明v上述类Person用到了文件MyNamesapce.cs中的类Student和Teacher,编译程序不会产生任何问题,因为这三个类在同一命名空间chapter4中。v命名空间和类一样,允许采用嵌套的结构,一个命名空间可以包含其他命名空间,形成层次式结构,以更容易分组,管理。例如有以下代码:namespace A namespace A1 public class PrintName p

19、ublic void printName()Console.WriteLine(My name is A1);164.2 命名空间第第四四章章类类型型转转换换和和命命名名空空间间4.2.1 命名空间的声明命名空间的声明namespace A2 public class PrintName public void printName()Console.WriteLine(My name is A2);上述代码中,命名空间A下有A1和A2两个命名空间,要找到它们的类和访问它们的函数时,就必须在初始化实例的时候需要给出全路径名,也就是要用点(.)运算符来构成命名空间的完全限定名。例如:A.A1.Pr

20、intName a=new A.A1.PrintName();这样就形成了层次式的结构,以便区分类和容易对类进行分组和管理。174.2 命名空间第第四四章章类类型型转转换换和和命命名名空空间间4.2.1 命名空间的声明命名空间的声明v综上所述,使用命名空间具有以下优点:代码可以分布在多个文件中,方便对程序进行分布和管理;命名空间具有扩展性,在命名空间中增加新类,不影响已存在于此命名空间的其它类,使得设计灵活性更高;可以清晰显示出层次式的类的组织结构。184.2 命名空间第第四四章章类类型型转转换换和和命命名名空空间间4.2.1 命名空间的引用和别名命名空间的引用和别名【学一学学一学】v命名空间

21、的引用命名空间的引用 由于命名空间是程序的一种组织形式,程序的类封装在某个命名空间中,将程序编译成动态链接库,就可以在其它程序中非常方便地调用命名空间中的类了。引用命名空间,实际上就是为要使用的类指定所在的位置。在C#中,通过using语言来引用某个命名空间。其一般的语句格式是:using 命名空间名;v例如,在程序中经常使用的Console类就位于命名空间System中,因此在类文件的开始处就要通过下列语句来引用该命名空间,以便能在程序中使用类Console。using System;v当命名空间嵌套时,要引用其中某个命名空间,该命名空间就应是一个由点(.)构成的完全限定名。如下列示例所示:

22、194.2 命名空间第第四四章章类类型型转转换换和和命命名名空空间间4.2.1 命名空间的引用和别名命名空间的引用和别名using System;namespace chapter4 class Program static void Main(string args)ParentNameSpace.ChildNameSpaces.Class1 test=new ParentNameSpace.ChildNameSpaces.Class1();test.Print();204.2 命名空间第第四四章章类类型型转转换换和和命命名名空空间间4.2.1 命名空间的引用和别名命名空间的引用和别名nam

23、espace ParentNameSpace namespace ChildNameSpaces public class Class1 public void Print()Console.WriteLine(Hai,my name is gaoshan!);214.2 命名空间第第四四章章类类型型转转换换和和命命名名空空间间4.2.1 命名空间的引用和别名命名空间的引用和别名v上述代码中,是通过语句ParentNameSpace.ChildNameSpaces.Class1来访问类Class1,如果在程序中要多处访问命名空间ParentNameSpace.ChildNameSpaces中的

24、内容,这种直接使用完全限定名的方式无疑使代码显得冗长。此时,可以使用关键字using引入某个命名空间,其格式为:using 命名空间完全限定名;v因此,上述的示例代码就可以改写为以下形式:using System;using ParentNameSpace.ChildNameSpaces;namespace chapter4 class Program static void Main(string args)224.2 命名空间第第四四章章类类型型转转换换和和命命名名空空间间4.2.1 命名空间的引用和别名命名空间的引用和别名 Class1 test=new Class1();test.Pr

25、int();namespace ParentNameSpace namespace ChildNameSpaces public class Class1 public void Print()Console.WriteLine(Hai,my name is gaoshan!);234.2 命名空间第第四四章章类类型型转转换换和和命命名名空空间间4.2.1 命名空间的引用和别名命名空间的引用和别名v由此可见,由于在程序中引用了命名ParentNameSpace.ChildNameSpaces,因此在主方法Main中就可以直接访问类Class1了,大大简化了程序代码,提高了编程的效率。v二命名空

26、间的别名二命名空间的别名v在C#中,除了使用“using 命名空间完全限定名;”这种语句来引用某个命名空间外,还支持使用别名来引用某个命名空间或类。所谓别名,就是为某个命名空间或类的完全限定名取一个简单、易记的名字。使用别名的语句如下:using 别名=命名空间或类的完全限定名;v例如,在上述的示例程序中利用别名,该程序就可以改写为以下内容:using System;namespace chapter4 using A=ParentNameSpace.ChildNameSpaces.Class1;class Program244.2 命名空间第第四四章章类类型型转转换换和和命命名名空空间间4.

27、2.1 命名空间的引用和别名命名空间的引用和别名 static void Main(string args)A test=new A();test.Print();namespace ParentNameSpace namespace ChildNameSpaces public class Class1 public void Print()Console.WriteLine(Hai,my name is gaoshan!);254.2 命名空间第第四四章章类类型型转转换换和和命命名名空空间间4.2.1 命名空间的引用和别名命名空间的引用和别名v上述代码中,使用别名A作为命名空间Parent

28、NameSpace.ChildNameSpaces中类Class1的别名,这样使用别名A与直接使用完全限定名访问的效果是一样的。v需要注意的是,别名只能定义在命名空间(namespace语句)中,不能定义在类体或其它位置。另外,别名只在定义它的编译单元或命名空间定义体内有效。26本章小结第第四四章章类类型型转转换换和和命命名名空空间间 本章主要介绍数据类型转换和命名空间的引用及别名。其中类型转换是编程过程中经常要遇到的问题。这些转换内容主要包括:隐式类型转换、显式类型转换、引用类型转换以及装箱和拆箱操作。命名空间是C#中一个重要的概念,它是程序的一个逻辑上的组织结构。正确声明、引用以及为命名空

29、间取别名是组织程序结构、调用其它类的编程基础,读者必需在编程实践中熟练掌握这些知识。27练一练第第四四章章类类型型转转换换和和命命名名空空间间 任务4-2设计一个控制台应用程序,将输入的摄氏温度转换为华氏温度并输出(提示:华氏温度=摄氏温度*9/5+32)。任务4-3 在类Counter.cs中定义两个命名空间UpCount和DownCount,其中命名空间UpCount嵌套命名空间DownCount。命名空间UpCount中定义了一个类Counter,该类用于顺数计数,即0、1、2到指定的n;命名空间DownCount中也定义了一个同名的类Counter,该类用于倒数计数,即从指定的n、n-1、n-2到0。请分别用这两个类来实现顺数计数和倒数计数。28

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
百度文库年卡

猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服