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

上传人:qwe****56 文档编号:70009953 上传时间:2023-01-14 格式:PPT 页数:34 大小:495KB
返回 下载 相关 举报
第三章 C# 面向对象的编程技术.ppt_第1页
第1页 / 共34页
第三章 C# 面向对象的编程技术.ppt_第2页
第2页 / 共34页
点击查看更多>>
资源描述

《第三章 C# 面向对象的编程技术.ppt》由会员分享,可在线阅读,更多相关《第三章 C# 面向对象的编程技术.ppt(34页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第三章第三章面向对象的编程技术面向对象的编程技术面向对象的编程技术面向对象的编程技术面向对象的编程技术面向对象的编程技术内容:内容:内容:内容:设计对象设计对象设计对象设计对象 继承性继承性继承性继承性 多态性多态性多态性多态性 2设计对象 3.1学习完本节后,你将能够:学习完本节后,你将能够:在对象中封装信息在对象中封装信息使用属性管理对封装数据的访问使用属性管理对封装数据的访问3封 装 性 3.1.2将类的某些数据和操作这些数据的代码隐藏起来,将类的某些数据和操作这些数据的代码隐藏起来,这就是封装这就是封装封装的好处:封装的好处:可以隐藏类实现的细节可以隐藏类实现的细节简化用户的使用简化用

2、户的使用易于软件的更新、修订、维护。可以修改内部实现,但不影响用易于软件的更新、修订、维护。可以修改内部实现,但不影响用户的使用户的使用4访 问 修 饰 符使用访问修饰符,可以定义应用程序中类成员的作用域使用访问修饰符,可以定义应用程序中类成员的作用域使用访问修饰符,可以定义应用程序中类成员的作用域使用访问修饰符,可以定义应用程序中类成员的作用域(可见性)(可见性)(可见性)(可见性)声明声明声明声明定义定义定义定义public不限制访问private只能从包含的类中访问protected包含的类或继承的子类可以访问protected包含的类、继承的子类可以访问5属 性 3.1.3属性是属性是

3、“聪明聪明”的字段,的字段,“特殊特殊”的方法的方法定义属性类似于定义一个方法,但使用属性时如定义属性类似于定义一个方法,但使用属性时如同使用一个字段同使用一个字段class Cat public string name;public int age;static void Main()Cat cat1=new Cat();cat1.age=-13;/错误6创 建 属 性 3.1.3语法:语法:public|protected 数据类型 属性名 get /get访问器,获取属性的代码 set /set访问器,设置属性的代码 7创 建 属 性 3.1.3示例:示例:public class Ca

4、t private int age;public int Age get return age;set if(value=20)报告出错 else age=value;8使 用 属 性 3.1.3示例:示例:Cat cat1=new Cat();cat1.Age=1;/使用Age属性的set访问器int n=Cat.Age;/使用Age属性的get访问器cat1.Age=100;/收到错误消息9属 性 3.1.3如果只提供了如果只提供了get,没有,没有set,这样的属性为只读,这样的属性为只读属性属性如果只提供了如果只提供了set,没有,没有get,只写属性,只写属性优点:优点:属性在使用时

5、类似于类的字段,简单属性在使用时类似于类的字段,简单属性在实现时类似于方法,可以编写代码控制用户对数据的存、取,属性在实现时类似于方法,可以编写代码控制用户对数据的存、取,增加安全性检查增加安全性检查可以设置只读或只写属性可以设置只读或只写属性10练练练练 习习习习10 分钟分钟编写和使用属性 3.1.411面向对象的编程技术面向对象的编程技术面向对象的编程技术面向对象的编程技术内容:内容:内容:内容:设计对象设计对象设计对象设计对象 继承性继承性继承性继承性 多态性多态性多态性多态性 12继 承 性 3.2定义基类定义基类 创建派生类创建派生类 创建密封类创建密封类 13继 承 3.2.1“

6、A”is a kind of“B”,猫是一只动物,阿土仔是一个人,猫是一只动物,阿土仔是一个人“A”is a kind of“B”,说明,说明B是是A的一个父类,的一个父类,A是是B的子类的子类(基类(基类/派生类)派生类)子类无条件的接收父类具有的特性,包括属性和方法,这就叫做子类无条件的接收父类具有的特性,包括属性和方法,这就叫做继承继承继承允许把公共的属性和方法包含在基类中得到重用,此外,子继承允许把公共的属性和方法包含在基类中得到重用,此外,子类还可以添加自己的特性类还可以添加自己的特性 利用继承,可以以现有的类为基础,创建出新的类,实现了代码利用继承,可以以现有的类为基础,创建出新的

7、类,实现了代码的重用的重用14继 承 3.2.1继承描述了继承描述了继承描述了继承描述了“是什么种类是什么种类是什么种类是什么种类”(is a kind ofis a kind of)的关的关的关的关系系系系派生类从基类继承属性和派生类从基类继承属性和派生类从基类继承属性和派生类从基类继承属性和方法,实现了代码重用方法,实现了代码重用方法,实现了代码重用方法,实现了代码重用派生类变得更专门化派生类变得更专门化派生类变得更专门化派生类变得更专门化在在在在C#C#中只支持单一继承,中只支持单一继承,中只支持单一继承,中只支持单一继承,即每个子类只能有一个父即每个子类只能有一个父即每个子类只能有一个

8、父即每个子类只能有一个父类类类类父类父类子类子类动物动物大象大象猫猫15派 生 类 3.2.2示例:示例:示例:示例:动物园需要管理动物园需要管理动物园需要管理动物园需要管理3 3种动物,羚羊,狮子,大象种动物,羚羊,狮子,大象种动物,羚羊,狮子,大象种动物,羚羊,狮子,大象public class Antelope public bool IsSleeping;public void Sleep()public void Eat()public class Lion public bool IsSleeping;public void Sleep()public void Eat()publ

9、ic void StalkPrey()public class Elephant public bool IsSleeping;public void Sleep()public void Eat()public int CarrayCapacity;public class Animal public bool IsSleeping;public void Sleep()public void Eat()public class Antelope:Animalpublic class Lion:Animal public void StalkPrey()public class Elepha

10、nt:Animal public int CarrayCapacity;16派 生 类 3.2.2示例:示例:public class Animal protected bool IsSleeping;public void Sleep()public void Eat()public class Lion:Animal public void StalkPrey().Lion adoptedLion=new Lion();adoptedLion.StalkPrey();adoptedLion.Eat();17base 关键字 3.2.3base base 指代一个对象的父类指代一个对象的父类

11、指代一个对象的父类指代一个对象的父类/基基基基类类类类当子类中的成员与父类成员重当子类中的成员与父类成员重当子类中的成员与父类成员重当子类中的成员与父类成员重名是,父类的成员被隐藏名是,父类的成员被隐藏名是,父类的成员被隐藏名是,父类的成员被隐藏base base 的作用:的作用:的作用:的作用:点取父类中被子类隐藏了的成员点取父类中被子类隐藏了的成员点取父类中被子类隐藏了的成员点取父类中被子类隐藏了的成员变量变量变量变量点取被子类覆盖了的方法点取被子类覆盖了的方法点取被子类覆盖了的方法点取被子类覆盖了的方法作为方法名表示父类的构造函数作为方法名表示父类的构造函数作为方法名表示父类的构造函数作

12、为方法名表示父类的构造函数public Animal public void method1()public class Lion:Animal /将父类的同名方法隐藏 public void method1()public Lion()this.method1();base.method1();18密 封 类 3.2.4使用使用sealed关键字声明密封类关键字声明密封类密封类不允许其他类继承该类密封类不允许其他类继承该类密封的方法不允许被覆盖密封的方法不允许被覆盖如果你的类不希望被别人继承、修改,为安全起见,把它们定义为如果你的类不希望被别人继承、修改,为安全起见,把它们定义为sealed

13、吧!吧!和和java中的中的final相似相似public sealed class MyClass/class members19练练练练 习习习习10 分钟分钟创建派生类 3.2.520面向对象的编程技术面向对象的编程技术面向对象的编程技术面向对象的编程技术内容:内容:内容:内容:设计对象设计对象设计对象设计对象 继承性继承性继承性继承性 多态性多态性多态性多态性 21多 态 3.3通过在基类中使用虚方法来实现多态性通过在基类中使用虚方法来实现多态性创建和使用抽象类创建和使用抽象类22多 态 性 3.3.1具有多种不同的形态,这种能力称为多态性具有多种不同的形态,这种能力称为多态性子类继承

14、了父类的特性,但子类在某些细节上各不相同,多种多样,子类继承了父类的特性,但子类在某些细节上各不相同,多种多样,如何做到这一点呢?如何做到这一点呢?AnimalAnimal对象对象对象对象ElephantCatMouse行为行为行为行为Eat GrassEat MouseEat Cheese被调用的被调用的被调用的被调用的方法方法方法方法Eat()Eat()Eat()23编 写 虚 方 法 3.3.2如果希望某个方法的实现能够在子类中进一步得到改进,那么将方法如果希望某个方法的实现能够在子类中进一步得到改进,那么将方法定义为虚方法定义为虚方法使用使用virtual关键字定义虚方法关键字定义虚方

15、法 这样子类就可以改进从父类继承下来的这样子类就可以改进从父类继承下来的Eat方法了方法了public class Animal public virtual void Eat()Console.WriteLine(Eat something);24编 写 虚 方 法 3.3.2如果希望改进父类的某个虚方法,使用如果希望改进父类的某个虚方法,使用override关键字覆盖父类的方关键字覆盖父类的方法,提供自己的实现就可以了法,提供自己的实现就可以了当覆盖虚方法时,覆盖的方法必须与被覆盖的方法具有相同的方法签当覆盖虚方法时,覆盖的方法必须与被覆盖的方法具有相同的方法签名名 这样子类就可以有与众不

16、同的这样子类就可以有与众不同的Eat方法了方法了public class Cat:Animal public override void Eat()Console.WriteLine(Eat mouse!);25虚 方 法 的调 用 3.3.2当调用某个虚方法时,运行时会根据具体对象的类型,动态决定调用当调用某个虚方法时,运行时会根据具体对象的类型,动态决定调用哪个方法。哪个方法。public class Animal public virtual void Eat()Console.WriteLine(Eat something);public class Cat:Animal public

17、 override void Eat()Console.WriteLine(Eat mouse!);Animal myCat=new Cat();myCat.Eat();/输出:Eat mouse!26多 态 的 实 现 3.3.2动物饲养员public class AnimalTrainer public void FeedAnimal(Animal a)a.Eat();static void Main()Elephant myElephant=new Elephant();Cat myCat=new Cat();Mouse myMouse=new Mouse();AnimalTrainer

18、 marry=new AnimalTrainer();marry.FeedAnimal(myElephant);/Eat Grass marry.FeedAnimal(myCat);/Eat Mouse marry.FeedAnimal(myMouse);/Eat Cheese 27抽象方法抽象方法只有方法声明,但没有方法实现,是一个空方法只有方法声明,但没有方法实现,是一个空方法抽象的方法隐式为虚方法,必须被覆盖抽象的方法隐式为虚方法,必须被覆盖抽象类:抽象类:包含了抽象方法的类必须声明为抽象类包含了抽象方法的类必须声明为抽象类只能被继承,但不能创建一个抽象类的对象实例只能被继承,但不能创建

19、一个抽象类的对象实例使用使用abstract关键字定义抽象类和抽象方法关键字定义抽象类和抽象方法如果你的某个类的方法不知道该如何实现,实现的细节是由子类如果你的某个类的方法不知道该如何实现,实现的细节是由子类决定的,那么把它定义成决定的,那么把它定义成abstract吧!吧!抽象方法和抽象类 3.3.328class Shape public string name;public double GetArea()?抽象方法和抽象类 3.3.3 思考题:思考题:为什么使用抽象方法为什么使用抽象方法 定义一个定义一个shape类,表示各种几何图形,方法类,表示各种几何图形,方法getArea()用

20、来计算图用来计算图形的面积,该如何实现这个方法呢?形的面积,该如何实现这个方法呢?三角形,正方形,三角形,正方形,圆形圆形,不同的,不同的几何图形面积的计几何图形面积的计算公式不同,显然算公式不同,显然在这里没法实现在这里没法实现29class 圆形:Shape public override double GetArea()area=R2;class 三角形:Shape public override double GetArea()area=(底*高)/2;abstract class Shape public abstract double GetArea();/没有方法体 抽象方法和抽

21、象类 3.3.3 解决办法:定义为解决办法:定义为abstract,让各个子类自己去实现吧。,让各个子类自己去实现吧。30练练练练 习习习习10 分钟分钟使用多态性 3.3.431面向对象编程优点 3.1.1简易性简易性对象反映了现实世界的元素,使程序更容易设计对象反映了现实世界的元素,使程序更容易设计封装性封装性隐藏了重要的数据和实现细节,易于代码维护,更安全隐藏了重要的数据和实现细节,易于代码维护,更安全继承性继承性实现了代码重用,提高了开发效率实现了代码重用,提高了开发效率多态性多态性实现了现实世界对象的多样性和差异性实现了现实世界对象的多样性和差异性聚合性聚合性对象是独立的单元,由简单的对象组装成复杂的对象对象是独立的单元,由简单的对象组装成复杂的对象32面向对象面向对象面向对象面向对象编程就是编程就是编程就是编程就是“累累累累”啊!啊!啊!啊!小小 憩憩 片片 刻刻33 我想,想,想我想,想,想int x1=10;int x2=x1;x1+;/此时 x1=?,x2=?Animal cat1=new Animal();/Animal是一个类cat1.age=10;/设置年龄Animal cat2=cat1;cat1.age+;/此时 cat1.age=?cat2.age=?(10个积分)1 134

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com