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分钟共性问题集中讲解常见调试问题及解决办法代码规范问题共性问题集中讲解总结通用的类图中私有成员用什么表示?值类型和引用类型间的转换称为什么?值类型和引用类型变量存储方式的区别?简述类和结构的区别?