第10章 面向对象编程多态.ppt_第1页
第10章 面向对象编程多态.ppt_第2页
第10章 面向对象编程多态.ppt_第3页
第10章 面向对象编程多态.ppt_第4页
第10章 面向对象编程多态.ppt_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录,第1章计算机,互联网,万维网和C#第2章可视化Studio.NET集成开发环境第3章C#编程入门第4章控制结构(1)第5章控制结构(2)第6章方法第7章数组第8章基于对象的编程第9章面向对象编程:继承第10章面向对象编程:多态性第11章异常处理第12章图形用户界面概念(1)第13章图形用户界面概念(2)第14章多线程第15章字符, 字符串和正则表达式第16章图形和多媒体第17章文件和流第18章数据库、SQL和ADO.NET第19章可扩展标记语言第20章ASP.NET、网络表单和网络控制第21章ASP.NET和网络服务第22章网络:基于流的套接字和数据包第23章数据结构和集合第24章可访问

2、性第1部分。 NET概述、第2部分结构化编程、第3部分面向对象编程、第4部分C#相关应用程序、第5部分C#应用程序扩展、第10章面向对象编程:多态性、10.1概述、继承和多态性都是在开发复杂软件时使用的。多态性使我们能够编写大量以常规方式处理的相关类,并简化了向系统添加新类和函数的过程。有了多态性,我们可以设计和实现一个更容易扩展的系统。多态性定义了派生类对象可以被视为基类对象。如果基类引用引用派生类对象,基类引用可以转换为对象的实际数据类型,并被视为该实际数据类型。引用在程序中的体现是“=”。请查看代码。它演示了如何将派生类对象分配给基类引用,然后通过强制类型转换将基类引用转换为派生类引用。

3、10.2派生类对象被转换为基类对象,第21行代码将circle1(派生类对象的引用)分配给point2(基类对象的引用)。在C#中,因为继承是一种“归属”关系,所以派生类对象可以被分配给基类对象。相反,这是非常危险的。在第23行和第24行中,当C#遇到一个虚拟方法调用(比如ToString方法)时,它将根据被调用方法的对象类型(而不是引用对象的引用类型)来判断被调用方法的版本。在这个例子中,点2引用了一个环形对象,所以C#调用圆的ToString方法,而不是点的ToString方法。这种对调用哪个方法的判断是多态性的一个例子。静态无效主(字符串参数)点1=新点(30,50);圆圈1=新圆圈(1

4、20,89,2.7);点2=大约1;/1。基类引用派生类对象output=point2。ToString();/访问圆类的ToString方法。圆圈2=(圆圈)点2;/2 .基类引用可以转换为派生类引用,如果(point 1 siccircle)/确定左运算符类型是否与右运算符一致。大约2=(圆)点1;/基类对象不能直接转换为派生类对象。一些代码、基类引用和派生类引用可以通过四种方式与基类对象和派生类对象相结合:1。使用基类引用来引用基类对象;2.使用派生类引用来引用派生类对象;3.使用基类引用来引用派生类对象;4.派生类引用不能直接引用基类对象。所需的过程是:首先定义一个基类引用来引用一个派

5、生类对象,然后将基类引用转换为派生类引用。对于大型程序中的对象,确定其类型的方法之一是使用开关结构。然而,使用开关逻辑将导致程序面临各种问题。多态编程可以消除不必要的开关逻辑。使用C#的多态机制来执行相应的逻辑,程序员可以避免与切换逻辑相关的常见错误。10.3类型字段和开关语句,10.4多态性示例,空间对象绘制自己(),普卢顿绘制自己(),韦努蒂绘制自己(),空间飞船绘制自己(),Laserbeam绘制自己(),火星绘制自己(),定义从不打算实例化任何对象的类,称为抽象类。通常作为基类,它通常被称为抽象基类。抽象类通常包含一个或多个抽象方法或抽象属性。对于一个类,如果一个对象可以从它实例化,它

6、可以被称为一个具体的类。10.5抽象类和方法,关键字抽象用于将方法和属性声明为抽象。声明为抽象的方法和属性不提供实现部分。尝试这样做是一个语法错误。每个具体的派生类必须重写基类的所有抽象方法和属性(使用关键字override),并提供这些方法和属性的具体实现部分。任何包含抽象方法的类都必须声明为抽象的。抽象方法和虚拟方法的区别在于,虚拟方法有一个实现部分,并为派生类提供重写方法的选项;相反,抽象方法不提供实现部分,迫使派生类重写该方法(否则,派生类不能成为具体类)。多态性特别适合于实现分层软件系统。在面向对象编程中,通常定义一个迭代器类,它可以遍历容器中的所有对象(比如数组)。迭代器通常用于多

7、态编程。10.6示例(1):接口和实现的继承、形状、点2、圆环2、圆柱2、关键字密封适用于方法和类,以防止被覆盖和继承。不能在派生类中重写声明为密封的方法。声明为静态的方法和声明为私有的方法是隐式密封方法。使用密封类略微提高了运行时的性能。10.7密封的类和方法,10.8示例(2):使用多态薪资支付系统,员工、老板、员工代表、计件工人、小时工、接口适用于没有可继承实现的情况(即没有示例变量和默认方法实现的情况)。抽象类最好用于继承关系中的对象,以提供数据和服务,而接口则用于提供这样的服务,这些服务将完全不同的对象集合在一起,这些对象仅通过该接口关联。对于完全不同类的对象,接口为它们提供了一组统

8、一的方法和属性。使用这些方法和属性,程序可以多态地处理这些完全不同的类的对象。10.9示例(3):创建和使用接口、iage、person、tree、ishape、point3、circle3、cylinder3、有时,对象需要将方法作为参数传递给其他方法。C#不允许将方法引用作为参数直接传递给其他方法,但它提供了一个名为委托的特殊类,该类封装了一系列方法引用。包含方法引用的委托对象可以传递给另一个方法。此时,不会直接发送方法引用。相反,该对象是一个发送委托实例,它包含我们想要发送的方法引用。然后,接收委托引用的方法可以调用委托中包含的方法。10.11委托、SingleCast(委托类)和MultiCast(多播委托类)必须首先声明委托。在委托的声明中,指定一个方法头(参数和返回值)。如果方法引用要包含在委托对象中,则该方法必须具有与委托声明中定义的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论