4 深入 C# 数据类型

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

4深入C#数据类型预习检查结构是值类型还是引用类型?巩固类、对象、封装和方法调用理解结构理解值类型和引用类型作为方法参数的区别本章目标复习-类和对象对象–现实世界存在的具体实体,皆有各自的状态和行为类–具有相似状态和行为的集合–类是一种复杂的数据类型,是将不同类型的数据和与这些数据相关的操作封装在一起的集合体类和对象的关系类对象归纳共性类的实例化复习-类的属性类的属性–只读、只写–设置验证逻辑///summary///项目经理类////summaryclassPM{privatestring_name;//姓名publicstringName{get{return_name;}set{_name=value;}}//省略其他属性}privateint_age;//年龄publicintAge//年龄必须大于30岁{get{return_age;}set{if(value=30||value=100){_age=value;}else{_age=30;}}}演示示例:实现经理问好get、set访问器保障类中字段的安全自动属性自动属性优点:简化属性代码适用场合:不操作字段、不设置只读、只写、验证逻辑时//姓名publicstringName{get;set;}privatestring_name;//姓名publicstringName{get{return_name;}set{_name=value;}}简化演示示例:创建自动属性编译器自动生成Name的私有字段prop+tab键+tab键封装面向对象三大特征之一——封装–类是封装的最基本单元–通过访问修饰符授权–封装的好处保证数据安全性提供清晰的对外接口类内部实现可以任意修改,不影响其他类封装:又称信息隐藏,指利用抽象数据类型将数据和数据的操作封装在一起,使其构成一个不可分割的独立实体,尽可能隐藏内部的细节,只保留一些对外接口使之与外部发生联系类图类图描述类的结构VS2010的类图查看一个类的类图“锁”表示私有演示示例:使用VisualStudio生成类图通用的类图-age:int-name:string+Name:string类名PM+SayHi():void“-”表示私有“+”表示公有“:”后是变量类型“:”后是返回类型读懂类图是OOP的基本要求演示示例:使用Visio绘制PM类图复习-方法2-1方法–表示类和对象的行为–方法定义:参数、返回值、方法体演示示例:计算器演示示例:用户注册验证计算器用户注册验证值类型和引用类型下面代码的运行结果//使用值类型intage1=18;intage2=age1;age2=20;Console.WriteLine(age1:+age1);Console.WriteLine(age2:+age2);//使用引用类型SEse1=newSE();SEse2=newSE();se1.Age=18;se2=se1;se2.Age=20;Console.WriteLine(SE1的年龄为{0},se1.Age);Console.WriteLine(SE2的年龄为{0},se2.Age);值类型存储方式值类型直接存储值age1=18age1=18age1=18age2=18age2=age1age1=18age2=20age2=20age1age1age2age1age2Age=18引用类型存储方式se1se1.Age=18Age=18引用类型存储对象的引用se1se2se2=se1Age=20se1se2se2.Age=20两个变量都发生变化结构需要存储学生信息,具有ID和年龄,选用哪种数据类型?publicclassStudent{publicintid;//IDpublicintage;//年龄}publicstructStudent{publicintid;//IDpublicintage;//年龄}保存值类型字段结构:1、值类型2、使用结构具有较快提取速度结构定义结构中有字段,也可以有方法访问修饰符struct结构名{定义结构成员}publicstructStudent{publicintid;//IDpublicintage;//年龄publicvoidShow(){Console.WriteLine(ID:{0}\n年龄:{1},id,age);}}字段不能直接赋初值成员方法演示示例:结构创建和使用Studentstu;//创建学生结构stu.id=1001;//给学号赋值stu.age=20;//给年龄赋值stu.Show();结构的使用定义结构可以不用new为结构成员赋值调用结构的方法Studentstu;stu.id=1001;stu.age=20;Studentstu2;stu2=stu;值类型,存储为新的副本占用较多存储空间;类:存储地址结构是值类型,提取速度快,但是频繁的赋值操作会占用较大空间,在开发中多数情况下都定义为类!!!小结-1编写一个存储长方形(Rec)属性的结构–长(Length)–宽(Width)实例化一个结构长方形,并计算面积参考答案随意赋值的危险constintMALE=1;constintFEMALE=0;intgender;//性别的值//确定性别if(this.rbtnFemale.Checked){gender=FEMALE;}else{gender=MALE;}用常量给属性赋值:gender=FEMALE;也可以这样给属性赋值:gender=10;添加学生时用常量为性别赋值非法数据一种新的类型:枚举枚举是一组描述性的名称–定义一组有限的值,不能包含方法–对可能的值进行约束关键代码分析枚举保证了赋值的合理性privateGenderstudentGender;publicGenderStudentGender{get{returnstudentGender;}set{studentGender=value;}}性别属性是枚举类型不会输入非法值publicenumGender{Male,Female}枚举的名称深入理解枚举枚举数表示的整数值Console.WriteLine(性别的值是:{0},(int)student.StudentGender);取得枚举数表示的整数值初始值默认从0开始可以修改初始值publicenumGender{Male=1,Female=0}设置了初始值的枚举数演示示例1:为枚举数设置初始值枚举与其它类型的转换枚举转换为字符串字符串转换为枚举publicenumGender{Male,Female}Console.WriteLine(我的姓名:{0},性别:{1},this.Name,this.StudentGender.ToString());(Gender)(Enum.Parse(typeof(Gender),Male);需要转换的字符串转换为字符串枚举类型的名称指导—显示学生信息2-1训练要点:–定义枚举–使用枚举类型的属性需求说明:–在控制台输出学生的姓名、性别和年级–性别有两种:Male、Female–年级有三种:S1、S2、Y2指导—显示学生信息2-2实现思路:1、创建控制台程序2、定义两个枚举类型:性别、年级3、定义学生类,含3个属性:姓名、性别、年级4、创建学生对象,为属性赋值,并输出学生信息完成时间:20分钟小结-2类别数据类型描述值类型基本数据类型整型:int长整型:long浮点型:float、double字符型:char布尔型:bool枚举类型枚举:enum结构类型结构:struct引用类型类基类:System.Object字符串:string自定义类:class数组数组:int[],string[]C#常用值类型和引用类型演示示例:值类型和引用类型区别装箱和拆箱值类型和引用类型之间的转换值类型引用类型装箱拆箱staticvoidMain(string[]args){inti=123;objecto=i;//装箱i=456;//改变i的内容Console.WriteLine(值类型的值为{0},i);Console.WriteLine(引用类型的值为{0},o);}staticvoidMain(string[]args){inti=123;objecto=i;//装箱intj=(int)o;//拆箱}与值类型的变量类型要一致演示示例:装箱和拆箱不同类型参数传递公司通过投票选举优秀员工,每获得一投票,人气值增加1两次的人气值不同值方式传递引用类型值方式传递引用类型参数–参数在方法中被修改//传递引用类型参数SEzhang=newSE();//…省略其他赋值zhang.Popularity=10;Votervoter=newVoter();voter.Vote(zhang);MessageBox.Show(zhang.SayHi());publicvoidVote(SEse){//人气值增加1se.Popularity++;}按引用传递参数zhang在Vote()调用后发生了变化演示示例:投票增加人气值值方式传递值类型值方式传递值类型参数–结构:StructSE–不会被修改//传递值类型参数StructSEstructZhang=newStructSE();//创建SE结构//…省略其他赋值structZhang.Popularity=10;Votervoter=newVoter();voter.Vote(structZhang);MessageBox.Show(structZhang.SayHi());publicvoidVote(StructSEse){//人气值增加1se.Popularity++;}人气加1两次的人气值相同,参数在程序中未发生变化值传递演示示例:使用结构投票增加人气值引用方式传递ref引用方式传递值类型传递引用类型完全相同publicvoidVote(refStructSEse){//人气值增加1se.Popularity++;}ref引用方式传递参数调用Vote()前后人气值发生变化,保留对参数的修改数组作为参数-1阅读代码,写出运行结果int[]odd={1,3,5};ArrayOpropr=newArrayOpr();opr.PrintArray(odd);opr.ChangeToEven(odd);opr.PrintArray(odd);privatevoidChangeToEven(int[]arr){for(inti=0;iarr.Length;i++){arr[i]=i*2;}}arr[0]=1arr[1]=3arr[2]=5arr[0]=0arr[1]=2arr[2]=4引用类型参数传递数组是引用类型练习——生成设备ID需求说明–为公司购买的3台不同型号的计算机进行编号–编号的规则是“计算机型号+4位随机号”–编号完毕后,输出每台计算机的信息完成时间:15分钟共性问题集中讲解常见调试问题及解决办法代码规范问题共性问题集中讲解总结通用的类图中私有成员用什么表示?值类型和引用类型间的转换称为什么?值类型和引用类型变量存储方式的区别?简述类和结构的区别?

1 / 34
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功