资源预览内容
第1页 / 共35页
第2页 / 共35页
第3页 / 共35页
第4页 / 共35页
第5页 / 共35页
第6页 / 共35页
第7页 / 共35页
第8页 / 共35页
第9页 / 共35页
第10页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第七章 用对象思考:值类型和引用类型回顾class Student private string Study(string name)/private int Study(string name)/ 属性中get和set访问器可以单独存在么?返回值不同的两 个方法不能重载预习检查 结构是值类型还是引用类型? 结构是否可以添加无参的构造函数?本章任务 分别用结构和类实现Student对象 体会值类型与引用类型的区别 熟练掌握常量、枚举、结构的使用 理解值类型与引用类型的概念 理解值类型与引用类型作为参数时的区别 本章目标数据类型回顾常用的数据类型有哪些?婚否姓名成绩年龄举例bool布尔型string字符串float浮点型int整型C#常用数据类型为什么使用常量public class Compute double pi = 3.14;/计算圆的周长public double Perimeter(double radius) return 2 * pi * radius; /计算圆的面积public double Area(double radius)return pi * radius * radius; 这个类中,会反 复使用pi 如果pi在类中被修改了,计算结果错误 如何避免pi在类中被修改?常量 常量在使用过程中值不会发生变化 常量程序中反复使用const 类型 常量名 = 常量值 程序中不会被改 变static void Main(string args) const int PI = 3.14;PI = 3.20; 强制赋值会发生错误常量名通常使 用大写 随意赋值的危险const string GENDER_M = “男“; const string GENDER_F = “女“; / 性别 private string gender; public string Gender get return gender; set gender = value; 用常量给属性赋值: student.Gender = GENDER_M;也可以这样给属性赋值: student.Gender = “ACCP“;为Student类添加性别的属性,用常量赋值有违常理,非法数据演示示例1:MyEnum 什么是枚举 用一种新的类型定义enumpublic enum Genders Male, Female / 性别 private Genders gender; public Genders Gender get return gender; set gender = value; 这样给属性赋值: student.Gender = Genders.Male;如果这样属性赋值: student.Gender = “ACCP“;类型不同不能赋值性别属性的类型Genders是一个枚举类型 代码错误枚举定义 枚举是一组描述性的名称 枚举定义一组有限的值,不能包含方法 对可能的值进行约束 枚举允许描述性名称表示整数值访问修饰符 enum 枚举名 值1,值2 public enum Accp S1,S2,Y2 我们不会输入 S3,Y3public enum WeekDays S1=1,S2=2,S3=3 / Console.WriteLine(“的整数值是0.“,(int)(Accp.S2);取得枚举表示的 整数值枚举与其它类型的转换 枚举转换为字符串 字符串转换为枚举public enum Accp S1 ,S2,Y2 / Console.WriteLine(“S2的值是0.“,Accp.S2.ToString();(Accp)(Enum.Parse(typeof(Accp),“S2“);需要转换的 字符串枚举的特点汽车类有一个成员是车身颜色static void Main(string args)string color = new string “red“, “black“, “write“ ;Console.WriteLine(“我要选择的颜色是:0“,color0);使用时,必须了解数 组的构成枚举可以用描述性的名称表示值,使用时无需了解它的构成private enum color red,write,black static void Main(string args) Console.WriteLine(“我要选择的颜色是:0“, color.red); 枚举枚举的典型应用DialogResult choice; choice = MessageBox.Show(“确定要退出吗?“, “退出系统“, MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if(choice = DialogResult.OK)Application.Exit();DialogResult是个枚 举,指示对话框的返 回值 这样我们就不会判断一些非法的值,导致系统异常 为什么需要结构有很多预定义颜色正常人眼可分辨的颜色种类可达几十万种以上 Color提供使用RGB值返回颜色的方法FromArgb() System.Drawing.Color有很多颜色值,它是一个枚举吗?System.Drawing.Color是一个结构 结构定义 结构中有属性,也可以有方法public struct StructStudent public string Name;public int Age;public string Hobby;public int Popularity;public void SayHi()/ . 访问修饰符 struct 结构名 定义结构成员 构成和类相似定义成员变量不能赋初值成员方法/StructStudent myStu;myStu.Age = 20;myStu.Gender = Genders.Female;myStu.Hobby = “唱歌歌“;myStu.Name = “张靓靓“;myStu.Popularity = 100;myStu.SayHi();/结构的使用2-1定义结构可以不用new为结构成员赋值调用结构的方法 演示示例2:MyStruct运行结果和第二 章的SayHi相同/ StructStudent myStu = new StructStudent(“张靓靓“, Genders.Female, 20, “唱歌歌“, 100);myStu.SayHi(); /结构的使用2-2struct StructStudent /public StructStudent(string name, Genders gender, int age,string hobby, int popularity)this.Name = name;this.Gender = gender;/ 可以有构造函数 只能声明有参数 的构造函数 构造函数传参 理解结构与类的区别都可以实现接口都可以包含字段、方法 相同点结构中给字段赋值是错误的 类中可以给字段赋值 创建对象可以不用new创建对象必须使用new可以添加构造函数,但它们必须带参数可以添加无参的构造函数不可以有默认构造函数可以有默认构造函数不能被继承可以被继承值类型引用类型不同点结构类 小结 编写一个存储老师属性的结构 结构名称TeacherStruct 姓名(teacherName) 年龄(teacherAge) 参加工作的年限(yearsOfService) SayHi方法(大家好,我是某某老师。我已经在教育战线奋斗了 几年了) 调用这个结构显示它的数据参考答案值类型与引用类型演示示例3:MySchool 使用类版Student和结构版Student实现下面操作static void Main(string args) /使用值类型StructStudent student1 = new StructStudent();StructStudent student2 = new StructStudent();student1.Age = 18;student2 = student1;student2.Age = 20;Console.WriteLine(“student1 = 0,student2 = 1“, student1.Age,student2.Age); static void Main(string args) /使用引用类型Student student1 = new Student();Student student2 = new Student();student1.Age = 18;student2 = student1;student2.Age = 20;Console.WriteLine(“student1 = 0,student2 = 1“, student1.Age,student2.Age); 值类型值类型直接存储值Age=1Age=18 8student1student1studnet2student1.Age = 18Age=1Age=18 8Age=1Age=18 8student2 = student1student1.Age student1studnet2Age=1Age=18 8Age=2Age=20 0student2.Age = 20引用类型student1student1.Age = 18Age=18 引用类型存储对值的引用student1studnet2student2 = student1student1.Age 两个变量都发生 变化Age=20student1studnet2student2.Age = 20拆箱和装箱 值类型和引用类型之间的转换值类型 引用类型 装箱拆箱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; / 拆箱与值类型的变量 类型要一致演示示例4:拆箱装箱值方式的参数的传递 值传递方式传递值类型: 结构:StructStudent 不会被修改/传递值类型参数 StructStudent scofield = new StructStudent(“Scofield“, Genders.Male, 28, “越狱狱“); scofield.SayHi(); Vote(scofield); scofield.SayHi();private void Vote(StructStudent stu) stu.Popularity+; 人气属性加1的方法人气加1两次的人气值相同,参 数未发生变化值传递演示示例5:MySchool 值方式的参数的传递 值传递引用类型时: 类:Student 参数在程序中被修改/传递引用类型参数 Student scofield = new Student(“Scofield“, Genders.Male, 28, “越狱狱“); scofield.SayHi(); Vote(sc
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号