• / 35
  • 下载费用:10 金币  

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

关 键 词:
对象 思考 类型 引用
资源描述:
第七章,用对象思考:值类型和引用类型,回顾,class Student{ private string Study(string name) { //… } private int Study(string name) { //… }},属性中get和set访问器可以单独存在么?,返回值不同的两个方法不能重载,预习检查,,结构是值类型还是引用类型?结构是否可以添加无参的构造函数?,本章任务,分别用结构和类实现Student对象 体会值类型与引用类型的区别,熟练掌握常量、枚举、结构的使用理解值类型与引用类型的概念理解值类型与引用类型作为参数时的区别,本章目标,数据类型回顾,常用的数据类型有哪些?,为什么使用常量,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,什么是枚举,用一种新的类型定义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是一个枚举类型,代码错误,枚举定义,枚举是一组描述性的名称枚举定义一组有限的值,不能包含方法对可能的值进行约束枚举允许描述性名称表示整数值,访问修饰符 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.ToString());,(Accp)(Enum.Parse(typeof(Accp),"S2");,需要转换的字符串,枚举的特点,汽车类有一个成员是车身颜色,static void Main(string[] args) { string[] color = new string[] { "red", "black", "write" }; Console.WriteLine("我要选择的颜色是:{0}",color[0]); },使用时,必须了解数组的构成,枚举可以用描述性的名称表示值,使用时无需了解它的构成,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-2,struct StructStudent{ //… public StructStudent(string name, Genders gender, int age, string hobby, int popularity) { this.Name = name; this.Gender = gender; //… }},可以有构造函数,只能声明有参数的构造函数,构造函数传参,理解结构与类的区别,,小结,编写一个存储老师属性的结构结构名称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=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,studnet2,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:拆箱装箱,值方式的参数的传递,值传递方式传递值类型:结构: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(scofield);scofield.SayHi();,引用类型:类,人气属性加1的方法,,人气加1,,引用方式传递,传递值类型,传递引用类型,ref方式传递完全修改,private void Vote(ref StructStudent stu){ stu.Popularity++;},ref引用方式传递参数,,,演示示例6: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++) { arr[i] = i * 2; }},,值方式传递,,arr[0]=1arr[1]=3arr[2]=5arr[0]=0arr[1]=2arr[2]=4,参数被修改,数组是引用类型,演示示例7:MyArray,数组属性,建立班级类包含多个学员,访问学员对象,,MyClass1 myClass1 = new MyClass1("T01");myClass1.Students[2].SayHi();,通过索引访问,数组属性,什么是索引器,能否通过姓名访问学员?,public Student this[int index] { get { return students[index]; } },Students类中添加,//采用索引器的方式MyClass myClass = new MyClass("T01");myClass.Students[2].SayHi();myClass.Students["周杰杰"].SayHi();…,可以按照索引访问,重载的索引器根据姓名查找学员,演示示例8:MySchool,索引器的特点,DataRow["列名"],DataReader["列名"],数组属性只能根据下标(索引)来访问索引器可以被重载可以使用更灵活的方式访问,定义访问方式我们以前用过的索引器,类图,VS2005的类图,类图描述类的结构,,查看一个类的类图,,,,“锁”表示私有,不同字段有不同的图标,通用的类图,“-”表示私有“+”表示公有,,“:”后是变量类型,,“:”后是返回类型,读懂类图是OOP的基本要求,总结,常量在程序中可以被修改吗?枚举中可以有方法吗?简述类和结构的区别?值类型和引用类型间的转换称为什么?通用的类图中私有成员用什么表示?,
展开阅读全文
  麦档网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:用对象思考:值类型和引用类型.ppt
链接地址:https://www.maidoc.com/p-1407.html

当前资源信息

编号: 20180226220804035165

类型: 共享资源

格式: PPT

大小: 1.57MB

上传时间: 2018-02-26

关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

[email protected] 2018-2020 maidoc.com版权所有  文库上传用户QQ群:3303921 

麦档网为“文档C2C模式”,即用户上传的文档所得金币直接给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的金币归上传人(含作者)所有。
备案号:蜀ICP备17040478号-3  
川公网安备:51019002001290号 

本站提供办公文档学习资料考试资料文档下载


收起
展开