收藏 分享(赏)

用对象思考:值类型和引用类型.ppt

上传人:buyk185 文档编号:5563700 上传时间:2019-03-08 格式:PPT 页数:35 大小:1.57MB
下载 相关 举报
用对象思考:值类型和引用类型.ppt_第1页
第1页 / 共35页
用对象思考:值类型和引用类型.ppt_第2页
第2页 / 共35页
用对象思考:值类型和引用类型.ppt_第3页
第3页 / 共35页
用对象思考:值类型和引用类型.ppt_第4页
第4页 / 共35页
用对象思考:值类型和引用类型.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、第七章,用对象思考:值类型和引用类型,回顾,class Student private string Study(string name)/private int Study(string name)/ ,属性中get和set访问器可以单独存在么?,返回值不同的两个方法不能重载,预习检查,结构是值类型还是引用类型? 结构是否可以添加无参的构造函数?,本章任务,分别用结构和类实现Student对象 体会值类型与引用类型的区别,熟练掌握常量、枚举、结构的使用 理解值类型与引用类型的概念 理解值类型与引用类型作为参数时的区别,本章目标,数据类型回顾,常用的数据类型有哪些?,为什么使用常量,publi

2、c 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

3、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类添加性别

4、的属性,用常量赋值,有违常理,非法数据,演示示例1:MyEnum,什么是枚举,用一种新的类型定义enum,public enum Genders Male, Female / 性别 private Genders gender; public Genders Gender get return gender; set gender = value; ,这样给属性赋值: student.Gender = Genders.Male;,如果这样属性赋值: student.Gender = “ACCP“;,类型不同不能赋值,性别属性的类型,Genders是一个枚举类型,代码错误,枚举定义,枚举是一组描

5、述性的名称 枚举定义一组有限的值,不能包含方法 对可能的值进行约束 枚举允许描述性名称表示整数值,访问修饰符 enum 枚举名 值1,值2 ,public enum Accp S1,S2,Y2 ,我们不会输入S3,Y3,public 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.ToSt

6、ring();,(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)

7、 Console.WriteLine(“我要选择的颜色是:0“, color.red); ,枚举,枚举的典型应用,DialogResult choice; choice = MessageBox.Show(“确定要退出吗?“, “退出系统“, MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if(choice = DialogResult.OK)Application.Exit();,DialogResult是个枚举,指示对话框的返回值,这样我们就不会判断一些非法的值,导致系统异常,为什么需要结构,有很多预定义颜色,正常人眼可分

8、辨的颜色种类可达几十万种以上 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 结构名 定义结构成员 ,构成和类相似,定义成员变量不能赋初值,

9、成员方法,/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);m

10、yStu.SayHi(); /,结构的使用2-2,struct StructStudent /public StructStudent(string name, Genders gender, int age,string hobby, int popularity)this.Name = name;this.Gender = gender;/ ,可以有构造函数,只能声明有参数的构造函数,构造函数传参,理解结构与类的区别,小结,编写一个存储老师属性的结构 结构名称TeacherStruct 姓名(teacherName) 年龄(teacherAge) 参加工作的年限(yearsOfServic

11、e) 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.

12、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)

13、; ,值类型,值类型直接存储值,Age=18,student1,student1,studnet2,student1.Age = 18,Age=18,Age=18,student2 = student1,student1.Age,student1,studnet2,Age=18,Age=20,student2.Age = 20,引用类型,student1,student1.Age = 18,Age=18,引用类型存储对值的引用,student1,studnet2,student2 = student1,student1.Age,两个变量都发生变化,Age=20,student1,studnet

14、2,student2.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

15、:拆箱装箱,值方式的参数的传递,值传递方式传递值类型: 结构: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,值

16、方式的参数的传递,值传递引用类型时: 类:Student 参数在程序中被修改,/传递引用类型参数 Student scofield = new Student(“Scofield“, Genders.Male, 28, “越狱狱“); scofield.SayHi(); Vote(scofield); scofield.SayHi();,引用类型:类,人气属性加1的方法,人气加1,引用方式传递,传递值类型,传递引用类型,ref方式传递完全修改,private void Vote(ref StructStudent stu) stu.Popularity+; ,ref引用方式传递参数,演示示例6

17、:MySchool,值类型和引用类型细分,传递数组,数组是值类型还是引用类型,/ int odd = 1, 3, 5 ; PrintArray(odd); ChangeToEven(odd); 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,参数被修改,数组是引用类型,演示示例7:MyArray,数组属性,建立班级类包含多个学员,访问学员对象,My

18、Class1 myClass1 = new MyClass1(“T01“); myClass1.Students2.SayHi();,通过索引访问,数组属性,什么是索引器,能否通过姓名访问学员?,public Student thisint indexget return studentsindex; ,Students类中添加,/采用索引器的方式 MyClass myClass = new MyClass(“T01“); myClass.Students2.SayHi(); myClass.Students“周杰杰“.SayHi(); ,可以按照索引访问,重载的索引器根据姓名查找学员,演示示例8:MySchool,索引器的特点,DataRow“列名“,DataReader“列名“,数组属性只能根据下标(索引)来访问 索引器可以被重载 可以使用更灵活的方式访问,定义访问方式 我们以前用过的索引器,类图,VS2005的类图,类图描述类的结构,查看一个类的类图,“锁”表示私有,不同字段有不同的图标,通用的类图,“-”表示私有 “+”表示公有,“:”后是变量类型,“:”后是返回类型,读懂类图是OOP的基本要求,总结,常量在程序中可以被修改吗? 枚举中可以有方法吗? 简述类和结构的区别? 值类型和引用类型间的转换称为什么? 通用的类图中私有成员用什么表示?,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报