实现方法: 虚方法, 抽象类, 接口

1、虚方法

  将父类的方法标记为虚方法,使用关键字virtual,这个方法可以被子类重新写一遍。

  在父类的方法前面加上一个virtual,在子类的方法前面加上一个override;如果子类的方法前面不加override,编译器不会报错,但这样的话,就无法通过父类来调用子类的方法,因为这个方法成了子类的独有的方法,只是名字与父类相同而已,与父类无关。

  注意:如果需要对父类的方法进行重写的话,一定要在子类的方法面前加上overrie进行修饰。

  什么时候使用:几个类可以提取出一个共同的父类,它们都要完成相同的事情,而且这个父类可以被实例化。

    例如: 员工9点打卡,经理10点打卡,董事长11点打卡; 这几个类共同的父类是员工类,它们都要完成打卡这件事情。

    public class Employee{public virtual void DaKa(){Console.WriteLine("九点打卡");}}public class Manager : Employee{public override void DaKa(){Console.WriteLine("经理10点打卡");}}public class Chairman : Employee{public override void DaKa(){Console.WriteLine("董事长11点打卡");}}

            Employee emp = new Employee();Manager mg = new Manager();Chariman cm = new Chariman();Employee[] emps = { emp, mg,cm };for (int i = 0; i < emps.Length; i++){emps[i].DaKa();}Console.ReadKey();

  emps[i].DaKa(); 调用的依然是父类的方法 DaKa(),只不过该方法已经被子类重写了。具体调用哪一个子类的DaKa()方法,取决于emp[i]里面装的是哪一个的子类对象。  上面的代码也体现了里氏转换原则,子类可以被赋值给父类。通过共同的父类,取消了各个子类之间的差异性。

2、使用虚方法需要注意的几点:

  1)父类中如果有方法需要让子类重写,则可以将该方法标记为virtual

  2)虚方法在父类中必须有实现,哪怕是空实现

  3)虚方法子类可以重写(override),也可以不重写

转载于:https://www.cnblogs.com/daisyping/p/7800155.html

c# 多态实现_虚方法相关推荐

  1. C# 中的多态和虚方法,如何实现多态和使用虚方法?

    在 C# 中,多态(Polymorphism)是面向对象编程的基本特性之一,它允许使用不同的对象和方法来执行同一操作.C# 中实现多态的方式主要是通过虚方法和抽象类. 虚方法是一种允许子类覆盖的方法, ...

  2. java虚方法和抽象方法_虚方法和抽象方法--基础回顾

    抽象方法是只有定义.没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写:虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖. 重写的子类虚函数就是被覆盖了. 抽象方 ...

  3. SV 类的虚方法 多态

    SV 类的虚方法 多态 类型转换 概述 概述 类的成员方法可以加修饰词virtual(虚方法) 虚方法是一种基本的多态结构 一个虚方法可以覆盖基类的同名方法 在父类和子类中声明虚方法,其方法名.参数名 ...

  4. 【M24】了解虚方法、多继承、虚基类、RTTI的成本

    1.编译器必须实现出C++语言的特性.一般情况下,我们只需要使用这些特性就好了,不需要关心内部的实现细节.但是,有些特性的实现,会对对象的大小和成员方法的执行速度造成影响.因此,有必要了解内部实现的细 ...

  5. 虚方法——systemverilog,SV

    引言 类的继承是继承父类的成员变量和成员方法.默认情况下,子类覆盖的方法并不会继承父类的同名方法,只有通过super.method()的方式显式执行,才会达到继承父类方法的效果. 默认情况下,子类中重 ...

  6. C#面向对象(四)虚方法实现多态

    一.虚方法实现多态 1,创建一个people基类 using System; using System.Collections.Generic; using System.Linq; using Sy ...

  7. 多态的实现(重载,虚方法,抽象类,接口)

    1.前言 多态是指,在同一个方法中,由于参数不同而导致执行效果各异.多态的实现方式主要是通过函数.运算符重载,虚成员,以及抽象类实现和接口.下面的内容就详细介绍一下前三种多态的实现形式. 2.方法重载 ...

  8. [转载]CLR怎样实现虚方法的多态调用(2)

    本文转载自:http://www.cnblogs.com/blusehuang/archive/2007/08/03/841707.html 在上一篇文章CLR怎样实现虚方法的多态调用(1)中主要介绍 ...

  9. C++ day22 继承(二)基类指针数组通过虚方法实现智能的多态

    继承一共有三种: 公有继承 私有继承 保护继承 文章目录 公有继承 基类和派生类的关系 is-a(用公有继承表示"是一种"的关系) has-a uses-a is-like-a i ...

最新文章

  1. shell中和||的使用方法
  2. 使用 Oracle GoldenGate 进行实时数据集成
  3. centos 8 安装使用配置
  4. 关于使用百度地图的总结
  5. MFC中新建类在classview中没有显示问题
  6. 熟悉的指标,多重的应用
  7. C#不同操作系统下,界面大小不一的原因
  8. 考研 数学一 公式笔记
  9. ADOMDConnection连接字符串与AnalysisService服务器配置
  10. 深入浅出MFC笔记(5)
  11. telnet 批量测试(二):telnet 批量测试脚本实现关键代码
  12. jetson nano 电源_Jetson Nano必读-第二站:电源
  13. 中文打字速度测试软件hztest_中文打字速度测试软件官方版
  14. 大学毕业4年-回顾和总结(3)-投资理财观-图穷而真相现
  15. 一次百度网盘的悲惨经历
  16. Linux之磁盘配额
  17. spin_lock 自旋锁
  18. linux otg u盘,如何使用OTG手机功能U盘?
  19. Spark性能优化--如何解决数据倾斜
  20. 解读阿里精准推广的核心算法

热门文章

  1. 如何判断链表是否有环_如何快速判断气门油封是否漏油?
  2. js返回顶部和始终保持底部
  3. 网络营销外包排名没效果想必是这些因素影响了网络营销外包
  4. 浅析在网站软文内容中是如何做好关键词优化的?
  5. 提升网站竞争力从这三方面着手努力!
  6. mysql 5.6.29编译安装_MySQL-5.6.29源码编译安装记录
  7. 哪些模块可用于python性能分析_提升Python程序性能的方法有哪些?看完你就知道啦!...
  8. 3详细参数_【前沿】一加7Pro拍照详细参数曝光 3倍光变30W快充
  9. linux强制踢出用户,Linux下管理员强行踢出用户的命令使用方法
  10. docker klee tutorial_在容器中安装新的程序