学习情景面向对象程序设计精.ppt
学习情景面向对象程学习情景面向对象程序设计序设计第1页,本讲稿共88页面向对象面向对象的软件开发技术是当今计算机技术发展的重要成果和趋势之一。C#是完全面向对象的程序设计语言是完全面向对象的程序设计语言。类和对象类和对象是面向对象程序设计中的重要概念。封装性、继承性和多态性封装性、继承性和多态性是面向对象的特点。本讲主要介绍面向对象程序设计中的基本概念和基于C#的面向对象程序设计的方法。2022/10/112C#程序设计实用教程第2页,本讲稿共88页 7.1 对象和类对象和类对象对象对象是人们要进行研究的任何事物对象是人们要进行研究的任何事物颜色:灰色排量:3.0 刹车产地:德国行驶名字:保时捷行为状态状态颜色:红色排量:4.0刹车产地:意大利行驶名字:法拉利行为状态 回顾回顾现实生活中的现实生活中的对象,描述汽车的特征和行为对象,描述汽车的特征和行为 有各自不同的有各自不同的状态状态第3页,本讲稿共88页 7.1类和对象类和对象小汽车小汽车颜色:灰色颜色:灰色排量:排量:3.0 刹车刹车产地:德国产地:德国行驶行驶名字:保时捷名字:保时捷行为行为状态状态类的实例化,是类的实例化,是由类具体化对象由类具体化对象类类排量排量 颜色颜色 行驶行驶 刹车刹车 归纳一组相似对象归纳一组相似对象的共性的共性对象对象属性属性方法方法类描述一组相似对象的共性类描述一组相似对象的共性产地产地 名字名字 第4页,本讲稿共88页7.1类和对象类和对象-类类属性型号价格里程行为起动停车行驶属性车轮数量档的数量行为加速换档刹车属性名称颜色品种行为摇尾巴吃东西犬吠第5页,本讲稿共88页7.1 类和对象类和对象类:相对对象而言,类似于蓝图包含方法和数据对象:是类的实例使用关键字new创建对象具有行为对象对象厨房厨房起居室起居室浴室浴室书房书房饭厅饭厅储藏室储藏室门廊门廊类类第6页,本讲稿共88页7.1 类和对象类和对象 数据成员成成员员方方法法对象对象:桑塔纳桑塔纳对象特征对象特征:黑色黑色 2000 20002.4T 2.4T 上海大众上海大众动态特征动态特征:载人载人抽象抽象抽象抽象实例化实例化实例化实例化类类:汽车汽车属性属性:颜色颜色 型号型号 马力马力 生产厂家生产厂家服务服务:运输运输数据值执执行行的的操操作作类与对象的关系示例类与对象的关系示例第7页,本讲稿共88页7.1 类和对象类和对象类:是一种抽象的数据类型,它是所有具有一定共性的对象的抽象。本质上可以认为是对对象的描述,是创建对象的“模板”。类的某一个对象则被称为是类的一个实例,是类的实例化结果。对象类实例化抽象第8页,本讲稿共88页课堂讨论课堂讨论先有对象还是先有类?应该先定义类才可以从类的定义声明对象应该先定义类才可以从类的定义声明对象。第9页,本讲稿共88页7.2 面向对象语言的特点面向对象语言的特点设计规范设计规范面向对象面向对象封装封装继承继承多态多态第10页,本讲稿共88页7.2 面向对象语言的特点面向对象语言的特点-封装封装封装,就是对数据的隐藏,封装实现了把数据和操作这些数据的代码(即离散的部件)包装成一个对象,而将数据和操作细节(方法)隐藏起来。私有数据私有数据 方法方法 方法方法数据数据对象对象A对象对象B公有数据公有数据产品封装产品封装模块化模块化 信息隐信息隐藏藏 第11页,本讲稿共88页7.2 面向对象语言的特点面向对象语言的特点-继承继承继承:指面向对象程序的两个类之间的一种关系。被继承的类叫被继承的类叫父类父类、超类超类或或基类基类(SuperClass、BaseClass)继承了父类所有属性和方法的类叫继承了父类所有属性和方法的类叫子类子类(SubClass).C#只支持单继承。只支持单继承。继承实现了软件的重用。继承实现了软件的重用。第12页,本讲稿共88页 在面向对象技术中,山地自行车、赛车以及串座在面向对象技术中,山地自行车、赛车以及串座双人自行车都是自行车类的子类,这个父子关系可以双人自行车都是自行车类的子类,这个父子关系可以如图所示:如图所示:自行车自行车(父类父类)双人自行车双人自行车子类子类山地自行车山地自行车赛车赛车7.2 面向对象语言的特点面向对象语言的特点-继承继承第13页,本讲稿共88页7.2 面向对象语言的特点面向对象语言的特点-多态多态 多态是指一个程序中存在着同名的不同方法。在面向对象的程序中多态表现为,可以利用重载在同一类中定义多个同名的不同方法实现多态,也可以通过子类对父类方法的覆盖实现多态。将军对士兵们命令:出发!将军对士兵们命令:出发!步兵步行,骑兵骑马步兵步行,骑兵骑马将军不必命令:步兵步行出发,骑兵骑马出发将军不必命令:步兵步行出发,骑兵骑马出发第14页,本讲稿共88页7.3 类的定义类的定义格式为:格式为:类修饰符 class 类名类名:基类类名 类体类体 关键字关键字合法的标识符合法的标识符属性属性(变量变量)方法方法第15页,本讲稿共88页例例7-1:定义一个车辆类(有两个变量,一个方法):定义一个车辆类(有两个变量,一个方法)class Vehicle int Passengers;/乘客数乘客数 int Gas;/所耗燃料所耗燃料 void Run()/模拟汽车运行模拟汽车运行 if(Gas0)Gas-=10;else Console.Write(“没有油了,不能再跑了没有油了,不能再跑了”);成员变量成员变量(字段)(字段)成员方法成员方法第16页,本讲稿共88页7.3类的定义在哪儿书写类的代码?在哪儿书写类的代码?与你的源代码文件在一块,同一个命名空间与你的源代码文件在一块,同一个命名空间(namespace)下。下。C#允许在一个类中嵌套另一个类的定义。允许在一个类中嵌套另一个类的定义。建议建议将类书写在另外一个将类书写在另外一个.cs文件中。文件中。第17页,本讲稿共88页C#中类的定义方法类定义的示例7-3:class 人人 /声明字段声明字段 public string 姓名姓名;public string 性别性别;public string 年龄年龄;/声明方法声明方法 public void 吃饭吃饭(string 食物食物)Console.Write(姓名姓名+“正在吃:正在吃:”+食物食物);第18页,本讲稿共88页例如例如7_2:public class Cuboid /类名为类名为Cuboid /声明字段声明字段(定义成员变量定义成员变量)private double length;private double width;private double high;public double Cubage()return length*width*high7.3 类的定义类的定义声明字声明字段段访问控制符访问控制符类的方法类的方法第19页,本讲稿共88页1.声明字段声明字段(成员变量成员变量)与普通变量的声明格式相同。与普通变量的声明格式相同。在类体中,字段声明的在类体中,字段声明的位置没有特殊要求,习惯上将字段声明在类体中的最前面,位置没有特殊要求,习惯上将字段声明在类体中的最前面,以便于阅读。以便于阅读。7.3 类的定义类的定义第20页,本讲稿共88页课本实例课本实例5-2class Student /字段声明 public string strName;private int nAge;/方法 void pri()Console.Write(姓名为:0,年龄为1,strName,nAge);第21页,本讲稿共88页7.4 创建类的对象创建类的对象在C#中,我们使用new运算符来创建类的对象。定义VehicleVehicle类的的对象象 Vehicle vc=new Vehicle();定定义CuboidCuboid类的的对象象Cuboid cu=new Cuboid();类名类名 对象名对象名=new 类名类名();实例化对象实例化对象 实例化对象实例化对象 第22页,本讲稿共88页引用对象成员变量的语法形式为:引用对象成员变量的语法形式为:对象名对象名.成员变量名成员变量名(成员方法成员方法);例如:例如:cu.length=2;cu.width=3;cu.high=5;cu.Cubage();访问对象成员访问对象成员 第23页,本讲稿共88页class Vehicle int Passengers;/乘客数乘客数 int Gas;/所耗燃料所耗燃料 void Run()/模拟汽车运行模拟汽车运行 if(Gas0)Gas-=10;else Console.Write(“没有油了,不能再跑了没有油了,不能再跑了”);Vehiclevc=newVehicle();vc.Passengers=4;vc.Gas=100;vc.Run();为为7-1创建对象创建对象第24页,本讲稿共88页为为7-2创建对象创建对象例如例如7_2:public class Cuboid /类名为类名为Cuboid /声明字段声明字段(定义成员变量定义成员变量)double length;public double width;private double high;public double Cubage()return length*width*highCuboidcu=newCuboidcu.length=2;cu.width=3;cu.high=5;cu.Cubage();第25页,本讲稿共88页课本实例课本实例5-2,创建对象创建对象class Student /字段 public string strName;public int nAge;public void PintInfo()Console.Write(姓名为:0的学生年龄为:1,strName,nAge);class test static void Main(string args)Student stu=new Student();stu.strName=张三;stu.nAge=19;stu.PintInfo();第26页,本讲稿共88页创建7-3对象类和对象的例子:人人姓名性别年龄吃饭()王秃子王秃子:人人王秃子男20吃饭()人 王秃子 =new 人();王秃子.姓名 =“王秃子“;王秃子.性别 =“男”;王秃子.年龄 =20;王秃子.吃饭(“红烧肉”);第27页,本讲稿共88页 公有成员和私有成员公有成员和私有成员class student public string name;/姓名姓名 private int age;/年龄年龄 private string idNumber;/身份证号身份证号static void Main(string args)student myStudent=new student();myStudent.name=张三张三;myStudent.age=20;私有成员私有成员 公有成员公有成员 实例化一个对象实例化一个对象 可以访问可以访问 无法访问编译错误无法访问编译错误第28页,本讲稿共88页表表7.1 7.1 类访问修饰符类访问修饰符访问修饰符访问修饰符意意 义义publicpublic(公有)(公有)类可以在其他名字空间访问类可以在其他名字空间访问internalinternal(内部)(内部)类类只只能能为为所所在在名名字字空空间间访访问问(默默认认此此)(如果引用类库,则不能访问如果引用类库,则不能访问)表表7.27.2成员访问修饰符成员访问修饰符访问修饰符访问修饰符意意 义义publicpublic(公有)(公有)访问不受限制访问不受限制protectedprotected(受保护)(受保护)访问限于所在类和所在类的派生类访问限于所在类和所在类的派生类internalinternal(内部)(内部)访访问问限限于于所所在在名名字字空空间间内内(如如果果引引用用类类库库,则不能访问则不能访问)private(私有)(私有)访问限于访问限于所在类所在类。7.3类的定义第29页,本讲稿共88页公有成员和私有成员公有成员和私有成员public(公有级别)定义为公有访问级别的类的成员能够被外界的任何对象访问,没有任何限制。class Person public string Name;/.class Program public static void Main(string args)Person myself=new Person();myself.Name=“Jiawei”;第30页,本讲稿共88页private(私有级别)定义为私有访问级别的类的成员只能被类的成员所访问,而不能被其它对象访问。class Person private string Name;/.class Program public static void Main(string args)Person myself=new Person();/!myself.Name=“Jiawei”;公有成员和私有成员公有成员和私有成员第31页,本讲稿共88页private(私有级别)正确使用方法class Person private string _name;public void SetName(string name)_name=name;class Program public static void Main(string args)Person myself=new Person();myself.SetName(“Jiawei”);公有成员和私有成员公有成员和私有成员第32页,本讲稿共88页课本实例课本实例5-3/学生类 /class Student /字段 public string strName;private int nAge;/方法 public void SetAge(int _nAge)this.nAge=_nAge;public int GetAge()return this.nAge;class UseStudent static void Main(string args)Student s=new Student();s.SetAge(10);Console.WriteLine(s.GetAge();第33页,本讲稿共88页7.4 类和类的成员类和类的成员属性属性classStudentprivatestaticstringstrName;privatestaticintnAge;public void SetAge(int _nAge)this.nAge=_nAge;public int GetAge()return this.nAge;方法SetAge(Value)和GetAge()分别读取和写入学生Age Students;s.SetAge(20);intStuAge=s.GetAge()每次都调用GetId()和SetId()方法会很繁琐属性第34页,本讲稿共88页7.4 类和类的成员类和类的成员属性属性classStudentpublic string strName;private int nAge;publicstringAgegetreturnnAge;setnAge=value;读取ID时调用将值赋给ID时调用第35页,本讲稿共88页7.4 类和类的成员类和类的成员属性属性访问修饰符数据类型属性名get;set;读/写属性可以赋值和检索值第36页,本讲稿共88页7.4 类和类的成员类和类的成员属性属性访问修饰符数据类型属性名get;只读属性只能检索值第37页,本讲稿共88页7.4 类和类的成员类和类的成员属性属性访问修饰符数据类型属性名set;只写属性只能赋值第38页,本讲稿共88页7.4 类和类的成员类和类的成员属性属性属性是属性是“聪明聪明”的字段,的字段,“特殊特殊”的方法的方法定义属性类似于定义一个方法,但使用属性时如同定义属性类似于定义一个方法,但使用属性时如同使用一个字段使用一个字段class Cat private string name;private int age;static void Main()Cat cat1=new Cat();cat1.age=-13;/错误错误第39页,本讲稿共88页属性的语法格式为:属性的语法格式为:访问修饰符访问修饰符 属性名属性名 get /读访问器读访问器 /执行体执行体 return;/执行体可任写,但须有执行体可任写,但须有return 语句。语句。set /写访问器写访问器 /执行体执行体 =value;/执行体可任写,但须有执行体可任写,但须有value值给某字段语句。值给某字段语句。7.4 类和类的成员类和类的成员属性属性第40页,本讲稿共88页7.4 类和类的成员类和类的成员属性属性示例:public class Cat private int age;public int Age get return age;set if(value=20)报告出错报告出错 else age=value;第41页,本讲稿共88页7.4 类和类的成员类和类的成员属性属性示例con6_2:Cat cat1=new Cat();cat1.Age=1;/使用使用Age属性的属性的set访问器访问器int n=Cat.Age;/使用使用Age属性的属性的get访问器访问器cat1.Age=100;/收到错误消息收到错误消息第42页,本讲稿共88页例如例如7_2(添加属性定义添加属性定义):public class Cuboid /类名为类名为Cuboid /声明字段声明字段(定义成员变量定义成员变量)private double length;private double width;private double high;/声明属性声明属性 public double Length get return length;set length=value;public double Width get return width;set width=value;public double High get return high;set high=value;/声明方法声明方法 public double Cubage()return length*width*high7.4 类和类的成员类和类的成员属性属性数据读取数据读取属性名:与字段属性名:与字段相关但不同相关但不同对数据值设置对数据值设置关键字,要写入字段的值关键字,要写入字段的值第43页,本讲稿共88页 7.4 类和类的成员类和类的成员属性属性public class Student int age=26;/姓名姓名 private string name;public string Name get return name;set name=value;/问候问候 public void SayHi()类的成员类的成员字段字段 属性属性 方法方法 类名类名 第44页,本讲稿共88页7.4 类和类的成员类和类的成员属性属性如果只提供了如果只提供了get,没有,没有set,这样的属性为只,这样的属性为只读属性读属性如果只提供了如果只提供了set,没有,没有get,只写属性,只写属性优点:优点:属性在使用时类似于类的字段,简单属性在使用时类似于类的字段,简单属性在实现时类似于方法,可以编写代码控制用户对数属性在实现时类似于方法,可以编写代码控制用户对数据的存、取,增加安全性检查据的存、取,增加安全性检查可以设置只读或只写属性可以设置只读或只写属性第45页,本讲稿共88页 7.4 类和类的成员类和类的成员属性属性private int age;/年龄年龄public int Age get return age;set if(value 0&value 0&value 100)age=value;else age=18;控制私有字段的可访问性控制私有字段的可访问性 保护内部数据的安全保护内部数据的安全 建议类内部敏感字段使用建议类内部敏感字段使用属性来控制访问属性来控制访问类型可以是各种数据类型,如:对象、数组等等类型可以是各种数据类型,如:对象、数组等等 第48页,本讲稿共88页 小结小结编写考试管理系统中的编写考试管理系统中的Student类类包含的属性包含的属性年龄(年龄(0-100)不符合的设为)不符合的设为18姓名(只读属性)姓名(只读属性)爱好(读写)爱好(读写)给属性赋值并打印出来给属性赋值并打印出来第49页,本讲稿共88页7.5类的方法-方法的定义语法访问修饰符(可选),默认情况下为private访问修饰符返回类型(参数列表)/方法主体如果不需要返回任何值,方法可能返回void数据类型方法是类或对象的行为方法是类或对象的行为对象需要做某些事情,在类中添加方法对象需要做某些事情,在类中添加方法方法的定义方法的定义合法的标识符合法的标识符不能加不能加“;”用逗号隔开变量定义用逗号隔开变量定义通过通过return返回值返回值 如果返回类型是如果返回类型是void,方法是否需要返回值?,方法是否需要返回值?第50页,本讲稿共88页【例5-9】方法的定义。方法的定义。classMotorcyclepublicvoidStartEngine()publicvoidAddGas(intgallons)publicintDrive(intmiles,intspeed)return0;2022/10/1151C#程序设计实用教程第51页,本讲稿共88页7.5 类的方法类的方法2.调用方法调用方法从方法被调用的位置,可以分为在方法声明的类内部类内部调用该方法和在类外部类外部调用方法。内部调用语法格式为:方法名方法名(参数列表参数列表)在方法声明的类定义外部调用该方法实际上是通过类声明的对象调用该方法,其格式为:对象名对象名.方法名方法名(参数列表参数列表)第52页,本讲稿共88页实例实例6_1:通过调用体积方法来实现计算长方体:通过调用体积方法来实现计算长方体对象的体积对象的体积第53页,本讲稿共88页7.5 类的方法-方法的调用【例例5-10】方法的调用。Motorcyclemoto=newMotorcycle();moto.StartEngine();moto.AddGas(15);moto.Drive(5,20);第54页,本讲稿共88页7.5 类的方法-从方法返回一般来说有两种情况将导致方法返回。(1)当遇到方法的结束花括号。(2)执行到return语句。有两种形式的return语句:一种用在void方法中(即无需有返回值的方法),另一种用在有返回值的方法中。第55页,本讲稿共88页【例【例5-11】通过方法的结束花括号返回。通过方法的结束花括号返回。classMyClasspublicvoidmyMethod()inti;for(i=0;i=5)i=i*2;Console.WriteLine(i);return;elsei=i*3;Console.WriteLine(i);return;2022/10/1157C#程序设计实用教程staticvoidMain()MyClassmycls=newMyClass();mycls.myMethod();第57页,本讲稿共88页使用下述形式的使用下述形式的return语句从方法返回一个值给调用者:语句从方法返回一个值给调用者:格式:格式:return value;【例5-13】通过方法的return语句返回值。class MyClass public int myMethod()int i=8;if(i=5)i=i*2;return i;else i=i*3;return i;static void Main()MyClass mycls=new MyClass();Console.WriteLine(mycls.myMethod();2022/10/1158C#程序设计实用教程第58页,本讲稿共88页7.5 类的方法-方法的参数在方法的声明与调用中,经常涉及方法参数,在在方法的声明与调用中,经常涉及方法参数,在方法声明中方法声明中使用的参数叫使用的参数叫形式参数形式参数(形参),(形参),在在调用方法调用方法中使用的参数叫中使用的参数叫实际参数实际参数(实参)。(实参)。在调用方法时,在调用方法时,参数传递参数传递就是将就是将实参实参传递给传递给形形参参的过程。的过程。2022/10/1159C#程序设计实用教程第59页,本讲稿共88页7.5 类的方法-方法的参数1.值参数简单数据类型的参数为值参数,它表明实参与形参之间按值传递。当这个方法被调用时,编译器为值参数分配存储单元,然后将对应的实参的值拷贝到形参中。这种传递方式的好处是在方法中对形参的修改不会影响外部的实参。2022/10/1160C#程序设计实用教程第60页,本讲稿共88页5.4.2 方法的参数【例【例5-14】使用值参数。使用值参数。usingSystem;namespaceValueParametersclassMyClasspublicvoidSwap(intx,inty)intk;k=x;x=y;y=k;2022/10/1161C#程序设计实用教程class Test static void Main()int a=8,b=10;Console.WriteLine(a=0,b=1,a,b);MyClass mycls=new MyClass();mycls.Swap(a,b);Console.WriteLine(a=0,b=1,a,b);程序的运行结果为:a=8,b=10a=8,b=10第61页,本讲稿共88页7.5 类的方法-方法的参数2.2.引用参数引用参数用ref修饰符声明的简单数据类型参数为引用参数。引用数据类型作为参数引用参数并不创建新存储单元,它与实参变量同处一个存储单元。因此,对形参的修改就是对实参变量的修改。基本类型基本类型基本类型基本类型参数按参数按引用传递引用传递时,时,时,时,实参与形参前实参与形参前实参与形参前实参与形参前均须使用关均须使用关键字键字ref。2022/10/1162C#程序设计实用教程第62页,本讲稿共88页7.5 类的方法-方法的参数【例【例5-15】使用引用参数。使用引用参数。usingSystem;namespaceReferenceParametersclassMyClasspublicvoidSwap(refintx,refinty)intk;k=x;x=y;y=k;2022/10/1163C#程序设计实用教程第63页,本讲稿共88页classTeststaticvoidMain()inta=8,b=10;Console.WriteLine(a=0,b=1,a,b);MyClassmycls=newMyClass();mycls.Swap(refa,refb);Console.WriteLine(a=0,b=1,a,b);程序的运行结果为:a=8,b=10a=10,b=82022/10/1164C#程序设计实用教程第64页,本讲稿共88页7-6构造函数构造函数构造函数是类的一种特殊方法,每次创建类的实例都会调用它。访问修饰符访问修饰符()/构造函数的主体语法:语法:/默认构造函数Student()_class=“信管;示例:第65页,本讲稿共88页有以下几点特殊性:构造方法在创建对象时构造方法在创建对象时被自动调用被自动调用。构造方法的构造方法的方法名方法名与与类名相同类名相同。没有返回类型没有返回类型和和返回值返回值。构造方法可以构造方法可以重载重载。通常用通常用public修饰修饰7-6构造函数构造函数第66页,本讲稿共88页6.3.1 声明构造方法声明构造方法 声明构造方法有两个特别要求声明构造方法有两个特别要求:一是构造方法一是构造方法不允许有返回类型不允许有返回类型包括包括void类型类型二是构造方法的名称必须二是构造方法的名称必须与类名相同与类名相同。7-6构造函数构造函数第67页,本讲稿共88页演示:示例17-6构造函数构造函数classStudentprivatestring_name;privatechar_gender;privatestring_class;privateuint_grade;/默认构造函数privateStudent()_class=“信管;staticvoidMain(stringargs)/调用默认构造函数Studentobj=newStudent();Console.WriteLine(“班级=+obj._class);Console.WriteLine(“成绩=+obj._grade);第68页,本讲稿共88页长方体类构造方法声明如下:public class Cuboid /类名为类名为Cuboid /声明字段声明字段(定义成员变量定义成员变量)private double length;private double width;private double high;/声明构造方法声明构造方法 public Cuboid(double l,double w,double h)length=l;width=w;high=h;/声明属性声明属性 public double Length get return length;set length=value;public double Width get return width;set width=value;public double High get return high;set high=value;/声明方法声明方法 public double Cubage()return length*width*high第69页,本讲稿共88页7-6构造函数构造函数创建对象:Cuboid cubiod=new Cuboid(l,w,h);第70页,本讲稿共88页 7-6构造函数构造函数【例【例5-5】通过构造函数,实现在产生一个学生对象时为其完成起名工作。通过构造函数,实现在产生一个学生对象时为其完成起名工作。usingSystem;namespaceExample_Construct/学生类/publicclassStudentpublicstringstrName;/域2022/10/1171C#程序设计实用教程第71页,本讲稿共88页 7-6构造函数构造函数/构造函数,为学生起名/publicStudent(string_strName)this.strName=_strName;classClass1staticvoidMain(stringargs)Students=newStudent(张三);Console.WriteLine(s.strName);2022/10/1172C#程序设计实用教程第72页,本讲稿共88页 例:例:using System;class MyClass public int x;public Myclass()/类类MyClass的构造函数的构造函数 x=10;class ConsDemo public static void Main()MyClass t1=new MyClass();MyClass t2=new MyClass();Console.WriteLine(“0t1”,t1.x,t2.x);运行结果如下:运行结果如下:第73页,本讲稿共88页7-6构造函数构造函数-参数化构造函数参数化构造函数访问修饰符 /构造函数的主体构造函数的主体语法语法:(参数列表)/参数化构造函数Student(stringstrclass)_class=strclass;示例:第74页,本讲稿共88页 构造函数也可以带参数。构造函数也可以带参数。例:例:using System;class Fruit public string color;public string shape;public Fruit(string c,string s)/类类Fruit的构造函数的构造函数 color=c;shape=s;class Test public static void Main()Fruit Orange=new Fruit(“orange”,”round”);/创建创建Orange实例实例 Console.WriteLine(“0,1”,Orange.color,Orange.shape);运行结果如下:运行结果如下:第75页,本讲稿共88页7-6构造函数构造函数-参数化构造函数参数化构造函数/默认构造函数privateStudent()_class=“信管;/参数化构造函数privateEmployee(stringstrclass,stringstrName,chargender,uintgrade)_class=strclass;_name=strName;_gender=gender;_grade=grade;publicstaticvoidMain(stringargs)/调用默认构造函数Studentobj=newStudent();/调用参数化构造函数Studentobj1=newStudent(“信管08“,”张亮亮“,男,98);Console.WriteLine(“默认构造函数输出:n班级=“+obj._class);Console.WriteLine(“n参数化构造函数输出:n班级=+obj1._class);第76页,本讲稿共88页析构函数析构函数是用于执行清除操作的特殊方法()0 /析构函数的主体 语法语法:Student()示例:第77页,本讲稿共88页7.7 方法重载方法重载6.4.16.4.1成员方法重载成员方法重载 方法可以重载,即两个或两个以上方法有方法可以重载,即两个或两个以上方法有相同相同的名称的名称。重载后的方法被调用时。重载后的方法被调用时,可根据方法可根据方法的的参数个数、类型参数个数、类型来区分应该调用哪个方法。来区分应该调用哪个方法。例如能同时处理整型与浮点型数据的重载方法:例如能同时处理整型与浮点型数据的重载方法:public void Swap(ref int a,ref int b)public void Swap(ref float a,ref float b)第78页,本讲稿共88页 为什么要重载为什么要重载 public int Sum(int para1,int para2)return para1+para2;整形参数,返整形参数,返回值整型回值整型如果想让两个如果想让两个string型、两个型、两个double型相加,怎么做?型相加,怎么做?编写两个不同名字的方法,这样我们在进行调用时编写两个不同名字的方法,这样我们在进行调用时要先判断是什么类型,能否不判断直接就能相加呢?要先判断是什么类型,能否不判断直接就能相加呢?第79页,本讲稿共88页 方法的重载方法的重载同一个类中添加几个名字相同,参数与返回值不同的方法同一个类中添加几个名字相同,参数与返回值不同的方法 public string Sum(string para1,string para2)return para1+para2;public double Sum(double para1,double para2)return para1+para2;调用时只要传递参数即可,无需判断类型调用时只要传递参数即可,无需判断类型 第80页,本讲稿共88页 重载的方式重载的方式class Add public string Sum(string para1,string para2)public int Sum(int para1,int para2)基于不同类型参数的重载基于不同类型参数的重载 class Add public int Sum(int para1,int para2)public int Sum(int para1,int par