资源预览内容
第1页 / 共46页
第2页 / 共46页
第3页 / 共46页
第4页 / 共46页
第5页 / 共46页
第6页 / 共46页
第7页 / 共46页
第8页 / 共46页
第9页 / 共46页
第10页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
深入 C# 数据类类型第二章回顾与作业点评v.NET 框架结构包括哪两个部分? v公共语言运行时的核心组件? v使用VS2010,在类中快速引入命名空间的方式 是什么?预习检查v结构是值类型还是引用类型? v如何标识方法为静态方法?本章任务v使用Visio绘制基本类图 v实现项目经理给员工评分功能 v实现给新购计算机编号 v实现投票器,选举最佳员工v巩固类、对象、封装和方法调用 v使用Visio绘制基本类图 v理解结构 v理解值类型和引用类型作为方法参数的区别 v使用静态方法解决实际问题本章目标复习-类和对象v对象p现实世界存在的具体实体,皆有各自的状态和行为 v类p具有相似状态和行为的集合p类是一种复杂的数据类型,是将不同类型的数据和 与这些数据相关的操作封装在一起的集合体 v类和对象的关系类 对象 归纳共性类的实例化复习-类的属性v类的属性p只读、只写p设置验证逻辑/ / 项目经理类 / class PM private string _name; /姓名public string Nameget return _name; set _name = value; /省略其他属性 private int _age; /年龄 public int Age /年龄必须大于30岁 get return _age; set if (value = 30 | value = 100)_age = value;else _age = 30; 演示示例:实现经理问好get、set访问器保障类中字段的安全自动属性v自动属性v优点:简化属性代码 v适用场合:不操作字段、不设置只读、只写、 验证逻辑时/ 姓名 public string Name get; set; private string _name; /姓名 public string Name get return _name; set _name = value; 简化 演示示例:创建自动属性编译器自动生成 Name的私有字段 prop + tab键 + tab键封装v面向对象三大特征之一封装p类是封装的最基本单元p通过访问修饰符授权p封装的好处 保证数据安全性 提供清晰的对外接口 类内部实现可以任意修改,不影响其他类封装:又称信息隐藏,指利用抽象数据类型将数据和数据的操作封 装在一起,使其构成一个不可分割的独立实体,尽可能隐藏内部的细节, 只保留一些对外接口使之与外部发生联系类图v类图描述类的结构VS2010的类图 查看一个 类的类图“锁”表示私有演示示例:使用Visual Studio生成类图通用的类图- age:int - name:string + Name:string类名PM+SayHi():void“-”表示私有 “+”表示公有“:”后是变量 类型“:”后是返回 类型读懂类图是OOP的基本要求 演示示例:使用Visio绘制PM类图练习绘制基本类图v需求说明p使用Visio绘制类图 项目经理类(PM) 程序员类( SE )+ 年龄 + 姓名 + 性别 + 工号 + 人气值 SE类+ 问好 + 年龄 + 姓名 + 性别 + 工号 + 资历 PM类+ 问好 完成时间:15分钟共性问题集中讲解n常见调试问题及解决办法n代码规范问题共性问题集中讲解复习-方法2-1v方法p表示类和对象的行为p方法定义:参数、返回值、方法体演示示例:计算器演示示例:用户注册验证v计算器 v用户注册验证值类型和引用类型v下面代码的运行结果/使用值类型 int age1 = 18; int age2 = age1; age2 = 20; Console.WriteLine(“age1: “ + age1); Console.WriteLine(“age2: “ + age2); /使用引用类型 SE se1 = new SE(); SE se2 = new SE(); se1.Age = 18; se2 = se1; se2.Age = 20; Console.WriteLine(“SE1 的年龄为 0“, se1.Age); Console.WriteLine(“SE2 的年龄为 0“, se2.Age);值类型存储方式值类型直接存储值age1=18age1=18age1 = 18 age1=18age1=18age2=18age2=18age2 = age1age1=18age1=18 age2=20age2=20age2 = 20age1age1age2age1age2Age=18引用类型存储方式se1se1.Age = 18Age=18v引用类型存储对象的引用se1se2se2 = se1Age=20se1se2se2.Age = 20两个变量都发生 变化结构v需要存储学生信息,具有ID和年龄,选用哪种 数据类型?public class Student public int id; /IDpublic int age; /年龄 public struct Student public int id; /IDpublic int age; /年龄 保存值类型字段结构: 1、值类型 2、使用结构具有较快提取速度结构定义v结构中有字段,也可以有方法访问修饰符 struct 结构名 定义结构成员 public struct Studentpublic int id; /IDpublic int age; /年龄public void Show()Console.WriteLine(“ID:0n年龄:1“,id,age); 字段不能直接赋初值成员方法演示示例:结构创建和使用Student stu; /创建学生结构stu.id = 1001; /给学号赋值stu.age = 20; /给年龄赋值stu.Show(); 结构的使用定义结构可以不用new为结构成员赋值调用结构的方法 Student stu; stu.id = 1001; stu.age = 20; Student stu2;stu2 = stu;值类型,存储为新的副本 占用较多存储空间; 类:存储地址结构是值类型,提取速度快,但是频繁的赋值操作会占用较大空间, 在开发中多数情况下都定义为类!小结2-1v编写一个存储长方形(Rec)属性的结构p长(Length)p宽(Width) v实例化一个结构长方形,并计算面积参考答案小结2-2类别 数据类型 描述 值类型基本数据类型整型:int 长整型:long 浮点型:float、double 字符型:char 布尔型:bool 枚举类 型枚举:enum 结构类型结构:struct 引用类型类基类:System.Object 字符串:string 自定义类 :class 数组数组:int, stringvC#常用值类型和引用类型演示示例:值类型和引用类型区别 装箱和拆箱v值类型和引用类型之间的转换值类型 引用类型 装箱拆箱static void Main(string args) int i = 123;object o = i; / 装箱i = 456; /改变i的内容Console.WriteLine(“值类型的值为 0“, i);Console.WriteLine(“引用类型的值为 0“, o); static void Main(string args) int i = 123;object o = i; / 装箱int j = (int)o; /拆箱 与值类型的变量 类型要一致演示示例:装箱和拆箱不同类型参数传递v公司通过投票选举优秀员工,每获得一投票, 人气值增加1两次的人气值不同值方式传递引用类型v值方式传递引用类型参数p参数在方法中被修改/传递引用类型参数 SE zhang = new SE(); /省略其他赋值 zhang.Popularity = 10; Voter voter = new Voter(); voter.Vote(zhang); MessageBox.Show(zhang.SayHi();public void Vote(SE se) /人气值增加1se.Popularity+; 按引用传递参数zhang在 Vote()调用后发生 了变化演示示例:投票增加人气值 值方式传递值类型v值方式传递值类型参数p结构:StructSEp不会被修改/传递值类型参数 StructSE structZhang = new StructSE(); /创建SE结构 /省略其他赋值 structZhang.Popularity = 10; Voter voter = new Voter(); voter.Vote(structZhang); MessageBox.Show(structZhang.SayHi();public void Vote(StructSE se) /人气值增加1se.Popularity+; 人气加1两次的人气值相同, 参数在程序中未发生 变化值传递演示示例:使用结构投票增加人气值 引用方式传递ref 引用方式传递值类型 传递引用类型 完全相同 public void Vote(ref StructSE se) /人气值增加1se.Popularity+; vref 引用方式传递参数调用Vote()前后人气值 发生变化,保留对参数 的修改数组作为参数v阅读代码,写出运行结果int odd = 1, 3, 5 ; ArrayOpr opr = new ArrayOpr(); opr.PrintArray(odd); opr.ChangeToEven(odd); opr.PrintArray(odd);private void ChangeToEven(int arr) for (int i = 0; i arr.Length; i+)arri = i * 2; arr0=1 arr1=3 arr2=5arr0=0 arr1=2 arr2=4引用类型参数 传递数组是引用类型 指导项目经理评分3-1v训练要点p方法调用p引用类型作为参数 v需求说明p实现项目经理给员工评分指导项目经理评分3-2v实现思路p编写SE类p查看评分窗体中创建公有成员变量保存员工信息 SE对象数组p初始化员工信息并使用ListView控件显示 编写Init()方法和UpdateView()方法pPM类添加Judge(SE se)方法p选中某员工,双击打开评分窗体,实现事件处理方法指导项目经理评分3-3v难点指导pListView展示数据p窗体间信息传递完成时间:30分钟public void UpdateView() lvAssess.Items.Clear(); /清空信息for (int i = 0; i engineers.Length; i+)ListViewItem item = new ListViewItem();item.Text = engineersi.ID;item.SubItems.Add(engineersi.Name); /设置姓名/省略设置年龄、评分、评价this.lvAssess.Items.Add(item); /添加项 /对选中对象评分FrmJudge frm = new FrmJudge(this,index);frm.Show();FrmShow窗 体对象选中的SE对象
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号