C#面向对象的编程技术.ppt

上传人:max****ui 文档编号:3399077 上传时间:2019-12-13 格式:PPT 页数:34 大小:495KB
返回 下载 相关 举报
C#面向对象的编程技术.ppt_第1页
第1页 / 共34页
C#面向对象的编程技术.ppt_第2页
第2页 / 共34页
C#面向对象的编程技术.ppt_第3页
第3页 / 共34页
点击查看更多>>
资源描述
第三章,面向对象的编程技术,2,面向对象的编程技术,内容:,设计对象继承性多态性,C#,3,设计对象3.1,学习完本节后,你将能够:在对象中封装信息使用属性管理对封装数据的访问,4,封装性3.1.2,将类的某些数据和操作这些数据的代码隐藏起来,这就是封装封装的好处:可以隐藏类实现的细节简化用户的使用易于软件的更新、修订、维护。可以修改内部实现,但不影响用户的使用,5,访问修饰符,使用访问修饰符,可以定义应用程序中类成员的作用域(可见性),声明,定义,public,不限制访问,private,只能从包含的类中访问,protected,包含的类或继承的子类可以访问,protected,包含的类、继承的子类可以访问,6,属性3.1.3,属性是“聪明”的字段,“特殊”的方法定义属性类似于定义一个方法,但使用属性时如同使用一个字段,classCatpublicstringname;publicintage;,staticvoidMain()Catcat1=newCat();cat1.age=-13;/错误,7,创建属性3.1.3,语法:,public|protected数据类型属性名get/get访问器,获取属性的代码set/set访问器,设置属性的代码,8,创建属性3.1.3,示例:,publicclassCatprivateintage;publicintAgegetreturnage;setif(value=20)报告出错elseage=value;,9,使用属性3.1.3,示例:,Catcat1=newCat();cat1.Age=1;/使用Age属性的set访问器intn=Cat.Age;/使用Age属性的get访问器cat1.Age=100;/收到错误消息,10,属性3.1.3,如果只提供了get,没有set,这样的属性为只读属性如果只提供了set,没有get,只写属性优点:属性在使用时类似于类的字段,简单属性在实现时类似于方法,可以编写代码控制用户对数据的存、取,增加安全性检查可以设置只读或只写属性,11,练习,10分钟,编写和使用属性3.1.4,12,面向对象的编程技术,内容:,设计对象继承性多态性,C#,13,继承性3.2,定义基类创建派生类创建密封类,14,继承3.2.1,“A”isakindof“B”,猫是一只动物,阿土仔是一个人“A”isakindof“B”,说明B是A的一个父类,A是B的子类(基类/派生类)子类无条件的接收父类具有的特性,包括属性和方法,这就叫做继承继承允许把公共的属性和方法包含在基类中得到重用,此外,子类还可以添加自己的特性利用继承,可以以现有的类为基础,创建出新的类,实现了代码的重用,15,继承3.2.1,继承描述了“是什么种类”(isakindof)的关系派生类从基类继承属性和方法,实现了代码重用派生类变得更专门化在C#中只支持单一继承,即每个子类只能有一个父类,父类,子类,动物,16,派生类3.2.2,示例:动物园需要管理3种动物,羚羊,狮子,大象,publicclassAntelopepublicboolIsSleeping;publicvoidSleep()publicvoidEat()publicclassLionpublicboolIsSleeping;publicvoidSleep()publicvoidEat()publicvoidStalkPrey()publicclassElephantpublicboolIsSleeping;publicvoidSleep()publicvoidEat()publicintCarrayCapacity;,publicclassAnimalpublicboolIsSleeping;publicvoidSleep()publicvoidEat()publicclassAntelope:AnimalpublicclassLion:AnimalpublicvoidStalkPrey()publicclassElephant:AnimalpublicintCarrayCapacity;,17,派生类3.2.2,示例:,publicclassAnimalprotectedboolIsSleeping;publicvoidSleep()publicvoidEat()publicclassLion:AnimalpublicvoidStalkPrey().LionadoptedLion=newLion();adoptedLion.StalkPrey();adoptedLion.Eat();,18,base关键字3.2.3,base指代一个对象的父类/基类当子类中的成员与父类成员重名是,父类的成员被隐藏base的作用:点取父类中被子类隐藏了的成员变量点取被子类覆盖了的方法作为方法名表示父类的构造函数,publicAnimalpublicvoidmethod1()publicclassLion:Animal/将父类的同名方法隐藏publicvoidmethod1()publicLion()this.method1();base.method1();,19,密封类3.2.4,使用sealed关键字声明密封类密封类不允许其他类继承该类密封的方法不允许被覆盖如果你的类不希望被别人继承、修改,为安全起见,把它们定义为sealed吧!和java中的final相似,publicsealedclassMyClass/classmembers,20,练习,10分钟,创建派生类3.2.5,21,面向对象的编程技术,内容:,设计对象继承性多态性,C#,22,多态3.3,通过在基类中使用虚方法来实现多态性创建和使用抽象类,23,多态性3.3.1,具有多种不同的形态,这种能力称为多态性子类继承了父类的特性,但子类在某些细节上各不相同,多种多样,如何做到这一点呢?,Animal对象,Elephant,Cat,Mouse,行为,EatGrass,EatMouse,EatCheese,被调用的方法,Eat(),Eat(),Eat(),24,编写虚方法3.3.2,如果希望某个方法的实现能够在子类中进一步得到改进,那么将方法定义为虚方法使用virtual关键字定义虚方法这样子类就可以改进从父类继承下来的Eat方法了,publicclassAnimalpublicvirtualvoidEat()Console.WriteLine(Eatsomething);,25,编写虚方法3.3.2,如果希望改进父类的某个虚方法,使用override关键字覆盖父类的方法,提供自己的实现就可以了当覆盖虚方法时,覆盖的方法必须与被覆盖的方法具有相同的方法签名这样子类就可以有与众不同的Eat方法了,publicclassCat:AnimalpublicoverridevoidEat()Console.WriteLine(Eatmouse!);,26,虚方法的调用3.3.2,当调用某个虚方法时,运行时会根据具体对象的类型,动态决定调用哪个方法。,publicclassAnimalpublicvirtualvoidEat()Console.WriteLine(Eatsomething);publicclassCat:AnimalpublicoverridevoidEat()Console.WriteLine(Eatmouse!);AnimalmyCat=newCat();myCat.Eat();/输出:Eatmouse!,27,多态的实现3.3.2,动物饲养员publicclassAnimalTrainerpublicvoidFeedAnimal(Animala)a.Eat();staticvoidMain()ElephantmyElephant=newElephant();CatmyCat=newCat();MousemyMouse=newMouse();AnimalTrainermarry=newAnimalTrainer();marry.FeedAnimal(myElephant);/EatGrassmarry.FeedAnimal(myCat);/EatMousemarry.FeedAnimal(myMouse);/EatCheese,28,抽象方法只有方法声明,但没有方法实现,是一个空方法抽象的方法隐式为虚方法,必须被覆盖抽象类:包含了抽象方法的类必须声明为抽象类只能被继承,但不能创建一个抽象类的对象实例使用abstract关键字定义抽象类和抽象方法如果你的某个类的方法不知道该如何实现,实现的细节是由子类决定的,那么把它定义成abstract吧!,抽象方法和抽象类3.3.3,29,classShapepublicstringname;publicdoubleGetArea()?,抽象方法和抽象类3.3.3,思考题:为什么使用抽象方法定义一个shape类,表示各种几何图形,方法getArea()用来计算图形的面积,该如何实现这个方法呢?,?,三角形,正方形,圆形,不同的几何图形面积的计算公式不同,显然在这里没法实现,30,class圆形:ShapepublicoverridedoubleGetArea()area=R2;,class三角形:ShapepublicoverridedoubleGetArea()area=(底*高)/2;,abstractclassShapepublicabstractdoubleGetArea();/没有方法体,抽象方法和抽象类3.3.3,解决办法:定义为abstract,让各个子类自己去实现吧。,?,31,练习,10分钟,使用多态性3.3.4,32,面向对象编程优点3.1.1,简易性对象反映了现实世界的元素,使程序更容易设计封装性隐藏了重要的数据和实现细节,易于代码维护,更安全继承性实现了代码重用,提高了开发效率多态性实现了现实世界对象的多样性和差异性聚合性对象是独立的单元,由简单的对象组装成复杂的对象,33,面向对象编程就是“累”啊!,小憩片刻,34,我想,想,想,?,intx1=10;intx2=x1;x1+;/此时x1=?,x2=?Animalcat1=newAnimal();/Animal是一个类cat1.age=10;/设置年龄Animalcat2=cat1;cat1.age+;/此时cat1.age=?cat2.age=?(10个积分),1,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!