C#多态,Override和New的用法

一. 面向对象重要特性之多态

要掌握C#的Override和New关键字的用法,首先要理解多态;这里不赘述各种官方对多态的解释,下面给出个人直白理解:

父类F中声明一个方法M并用virtual修饰其为虚方法,子类S实现了相同签名的方法M并用Override对齐进行修饰,这时称子类覆盖了父类的方法;用子类类型new出来赋值给父类类型的对象o时,o调用M,执行的是子类中的M,这种语法叫做多态。

二.Override和New使用示例

namespace LearnCS1
{class BaseClass{public virtual void Method1(){Console.WriteLine("Base - Method1");}public virtual void Method2(){Console.WriteLine("Base - Method2");}}class DerivedClass : BaseClass{public override void Method1(){Console.WriteLine("Derived - Method1");}public new void Method2(){Console.WriteLine("Derived - Method2");}}class Program{static void Main(string[] args){BaseClass bc = new BaseClass();DerivedClass dc = new DerivedClass();BaseClass bcdc = new DerivedClass();bc.Method1();bc.Method2();Console.WriteLine("------------------------------");dc.Method1();dc.Method2();Console.WriteLine("------------------------------");bcdc.Method1();bcdc.Method2();}}
}
/* Output:Base - Method1Base - Method2------------------------------Derived - Method1Derived - Method2------------------------------Derived - Method1Base - Method2
*/

上面示例代码中,bc对象调用的方法不存在继承和多态,则直接调用父类的方法;

dc对象调用的方法时属于继承语法(子类有则调用子类的,子类没有调用父类的),故调用子类方法

bcdc对象调用方法时属于多态语法,用override修饰的调用子类的,用new修饰的调用父类的

三.override修饰符

override方法提供从基类继承的方法的新实现。 通过 override 声明重写的方法称为重写基方法,也叫对父类方法的覆盖。 override 方法必须具有与重写基方法相同的签名。

不能重写非虚方法或静态方法。 重写基方法必须是 virtualabstract 或 override

不能使用 newstatic 或 virtual 修饰符修改 override 方法。

四.new修饰符

new和override这两个修饰符的含义互斥,用new修饰的成员称作隐藏,这也是编辑器默认的行为。如果移除new修饰符,程序仍可编译和运行,但会收到警告。

五.结论

override和new关键字是用来控制在继承关系中,对象访问子类还是父类成员的修饰符

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/53181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyCat分库分表

本章重点 mycat分表分库技术(横向数据切分) mycat数据切分规则(取余分库,自然月分库) mycat全局序列号(实现mysql集群主键ID全局自增) 一、分库分表 简单来说,就是指通过某种特…

“Interface 和 Type 区别”深度解析

“Interface 和 Type 区别”深度解析 文章目录 一、Interface 和 Type 是什么二、如何使用 Interface 和 Type1. 定义 Interface2. 定义 Type3. 使用 Interface 和 Type4. 区别与联系 三、Interface 和 Type 二者有哪些区别,分别在哪些场景使用1. 区别2. 场景 四、扩…

本地搭建 Whisper 语音识别模型

Whisper 是由 OpenAI 开发的一款强大的语音识别模型,具有出色的多语言处理能力。搭建和使用 Whisper 模型可以帮助您将音频内容转换为文本,这在语音转写、语音助手、字幕生成等应用中都具有广泛的用途。本指南将对如何在本地环境中搭建 Whisper 语音识别…

深入解析反射型 XSS 与存储型 XSS:原理、危害与防范

在网络安全领域,跨站脚本攻击(XSS)是一种常见的安全漏洞。XSS 攻击可以分为反射型 XSS 和存储型 XSS 两种类型。本文将详细介绍这两种类型的 XSS 攻击的原理、危害和防范措施。 一、反射型 XSS 1、原理 反射型 XSS 攻击也称为非持久性 XSS …

数据丢失要怎么处理,助你一键恢复数据

你平常会用优盘来传输资料吗?如果你也出现过优盘因为病毒或者误操作等原因引起了数据丢失的情况那就继续往下看吧。这篇文章带你了解u盘格式化后数据能恢复吗,带你了解可操作的工具。 1.福昕恢复数据 链接直达:https://www.pdf365.cn/foxit…

集成电路学习:什么是RTOS实时操作系统

RTOS:实时操作系统 RTOS,全称Real Time Operating System,即实时操作系统,是一种专为满足实时控制需求而设计的操作系统。它能够在外部事件或数据产生时,以足够快的速度进行处理,并在规定的时间内控制生产过…

2024国赛数学建模-模拟火算法(MATLAB 实现)

模拟退火算法 1.1 算法原理 模拟退火算法的基本思想是从一给定解开始 ,从邻域 中随机产生另一个解 ,接受 Metropolis准则允许目标函数在 有限范围内变坏 ,它由一控制参数 t决定 ,其作用类似于物 理过程中的温度 T,对于控制参数的每一取值 ,算法持续进 行“产生 —判断 —接受…

Mybatis中ORB映射

目录 1 MyBatis自动ORM失效 2 方案一:列的别名 3 方案二:结果映射(ResultMap - 查询结果的封装规则) 总结 1 MyBatis自动ORM失效 MyBatis只能自动维护库表”列名“与”属性名“相同时的一一对应关系,二者不同时&am…

已解决 AndroidRuntime java.lang.AbstractMethodError报错

现象 不混淆不报错,混淆后报这个错误 AndroidRuntime java.lang.AbstractMethodError 修复方式: step1 添加混淆规则,使其豁免混淆 step2 报错位置如果使用的是lambda表达式,还原为原来的写法,不用lambda表达式写。 通…

vscode中暂存块功能不能用了

vscode中暂存文件修改可以按每一处暂存,而不用一次暂存整个文件的修改,今天发现这个功能不能用了,不知道啥原因,记录一下。

Android 存储之 SharedPreferences 框架体系编码模板

一、SharedPreferences 框架体系 1、SharedPreferences 基本介绍 SharedPreferences 是 Android 的一个轻量级存储工具,它采用 key - value 的键值对方式进行存储 它允许保存和读取应用中的基本数据类型,例如,String、int、float、boolean …

JavaWeb案例

环境搭建 先创建好数据库,建表并插入数据 create database talis; use talis;-- 部门管理 create table dept(id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not null unique comment 部门名称,create_time datetime not null com…

MISRA C2012学习笔记(8)-Rules 8.13

文章目录 8.13 副作用(Side effects)Rule 13.1 初始化程序列表不得包含持久性副作用Rule 13.2 在所有合法的评估命令下,表达式的值应与其持续的副作用相同Rule 13.3 包含自增()或自减(--)运算符的完整表达式,除由自增或自减运算符引起的副作用外&#xf…

QT QGraphicsView实现预览图片显示缩略图功能

QT QGraphicsView实现预览图片显示缩略图功能QT creator Qt5.15.2 头文件&#xff1a; #ifndef TGRAPHICSVIEW_H #define TGRAPHICSVIEW_H#include <QGraphicsView> #include <QMainWindow> #include <QObject> #include <QWidget>class TGraphicsVie…

TCP的传输速度

如何确定TCP最大传输速度&#xff1f; TCP 的传输速度&#xff0c;受限于发送窗⼝&#xff0c;接收窗⼝以及⽹络设备传输能⼒。 其中&#xff0c;窗⼝⼤⼩由内核缓冲区⼤⼩决定。如果缓冲区与⽹络传输能⼒匹配&#xff0c;那么缓冲区的利⽤率就达到了最⼤化。 如何计算网络传…

vue transition组件

可能不生效的几个注意点 选择器的优先级谨慎合并样式 显示三阶段和隐藏三阶段的class名 1、vue2中显示的初始阶段类名是&#xff1a;v-enter&#xff1b;隐藏的初始阶段类名是&#xff1a;v-leave2、v-enter-active、v-leave-active这两个 class 可以被用来定义动画的持续时间…

设计模式1:C#开发中使用创建型的工厂模式和行为型的策略模式

一、接口设计的好处 三大好处&#xff1a;解耦、可复用、可扩展。 二、简单工厂模式 【三要素】能创建具体产品的工厂、抽象产品&#xff08;接口&#xff09;、具体产品 【基本用法】字符串>创建对象>调用其方法 // 产品接口 public interface IProduct {void Opera…

应用开发---VTK放大镜(区域放大)功能实现

VTK 医学图像处理---放大镜/区域放大功能 本博文主要内容为:实现放大镜的源代码;实现思路;具体代码说明。 目录 VTK 医学图像处理---放大镜/区域放大功能 简介: 1 放大镜源代码 1 wxInteractorStyleImage 类源代码 2 wxMagnifierAcotor类源代码 3 Magnifier.cpp 源…

速盾:低成本防御DDoS最佳方案是高防cdn吗?

随着互联网的快速发展&#xff0c;网络攻击也变得越来越普遍和严重。分布式拒绝服务攻击&#xff08;DDoS&#xff09;是一种常见的网络攻击方式&#xff0c;它利用大量的请求来淹没目标服务器&#xff0c;使其无法正常工作。为了保护服务器免受DDoS攻击的影响&#xff0c;使用…

2024高教杯数学建模A题思路

问题1:舞龙队沿螺距为55 cm 的等距螺线顺时针盘入 分析: 龙头速度:龙头前把手的行进速度始终保持1 m/s。螺线参数:螺距为55 cm,即0.55 m。初始条件:龙头位于螺线第16圈A点处。思路: 确定螺线方程:根据螺线的性质,建立极坐标方程,表示螺线各点的位置。计算时间步长:…