C#中重载重写和覆盖的定义与区别
作者:Czhenya 发布时间:2022-04-23 09:25:34
一、重载
1、重载示意
重载(Overload)是重新加载的意思,指的是同一个类中同名,但是参数列表不同的方法组(返回值不能区别函数是否重载),重载没有关键字。通俗点说重载是对内存中同一个类中的函数或方法进行重新加载的意思。
2、发生条件
必须发生在一个类中,函数名相同,参数类型或者个数不同构成重载,与返回类型无关。
如:
Public class Name
{
Public string GetName(string username)
{
Return username;
}
Public int GetName(int usercount)
{
Return usercount;
}
}
二、重写
1、示意
重写(Override)指子类修改父类中某个函数的函数体,需要重写的父类中的函数必须是由virtual、abstract 或override标注的,不能重写非虚方法或静态方法。
Override是在继承的时候,如果你写的函数与要继承的函数函数特征(函数特征包括函数名,参数的类型和个数)相同,那么,加上这个关键字,在使用这个子类的这个函数的时候就看不见父类(或超类)的函数了,它被覆盖掉了。
2、发生条件
必须发生在基类和派生类中,基类函数必须用virtual、abstract 或override修饰,派生类用override修饰。
如:
class Program
{
static void Main(string[] args)
{
oc oa=new ob();
oa.b(1, 2); //输出结果为fdfdf
}
public class oc
{
private int a;
//封装
public int geta
{
get { return a; }
}
public int seta
{
set { a = value; }
}
//函数b
public virtual int b(int c, int e)
{
Console.WriteLine("{0}+{1}={2}", c, e, c + e);
return c + e;
}
}
//派生类ob,基类oc
public class ob : oc
{
//重写基类中的函数b
public override int b(int c,int e)
{
Console.WriteLine("fdfdf");
return c;
}
}
}
三、覆盖
1、示意
覆盖指重新定义子类中与父类具有相同函数特征的的函数体。子类中有一函数和父类中函数的函数特征相同,但函数体不同,称为覆盖。这种覆盖又称为隐藏,是隐藏父类中相同的函数,并没有进行重写。
2、发生条件
在子类中写一个和基类一样名字(参数不同也算)的非虚函数,会让基类中的函数被隐藏,编译后会提示要求使用New关键字。
如:
class Program
{
static void Main(string[] args)
{
oc oa=new ob();
oa.b(1, 2); //输出结果为1+2=3
}
public class oc
{
private int a;
//封装
public int geta
{
get { return a; }
}
public int seta
{
set { a = value; }
}
//函数b
public int b(int c, int e)
{
Console.WriteLine("{0}+{1}={2}", c, e, c + e);
return c + e;
}
}
//派生类ob,基类oc
public class ob : oc
{
//覆盖,隐藏基类中的函数b
public new int b(int c,int e)
{
Console.WriteLine("fdfdf");
return c;
}
}
}
重写(Override)的两个函数的函数特征相同,应用在子类和父类中,会重写父类函数;
重载(Overload)的两个函数的函数名虽然相同,但函数特征不同,应用在同一类中;
覆盖(new)两个函数的函数名一定相同,但函数特征可相同也可不相同,应用在子类和父类中,会隐藏父类同名函数。
来源:https://blog.csdn.net/Czhenya/article/details/76092072


猜你喜欢
- Android能用来存储的地方有两个,一个是手机内置的存储空间,一个是外置的SD卡,内置的存储空间一般比较小,所以应用的缓存建议存储在外置的
- 这篇文章主要介绍了Java实现顺序栈原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考
- Java计算一段程序的运行时间介绍了两种方法,一种是毫秒级别的计算,另一种是更精确的纳秒级别的计算。毫秒级别计算时间  
- 下面一段内容有项目需求有项目分析,通过一个小demo给大家展示下C#如何对多线程、多任务管理的。项目需求:假设多个任务需要执行,每个任务不是
- Zookeeper和Eureka哪个更好?1、CAP理论一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求C:数据一致性
- RecyclerView 已经出来很久了,但是在项目中之前都使用的是ListView,最近新的项目上了都大量的使用了RecycleView.
- 本文实例讲述了Java删除二叉搜索树最大元素和最小元素的方法。分享给大家供大家参考,具体如下:在前面一篇《Java二叉搜索树遍历操作》中完成
- 本文实例讲述了Android编程实现自定义进度条颜色的方法。分享给大家供大家参考,具体如下:android 自定义进度条颜色先看图基于产品经
- 本文实例讲述了C#实现HTTP下载文件的方法。分享给大家供大家参考。主要实现代码如下:/// <summary>/// Http
- 本文实例讲述了java GUI编程之监听操作。分享给大家供大家参考,具体如下:当点击Frame中的component组件时,会产生相应的效果
- 由于需要访问MongoDB,但是本地开发环境不能直接连接MongoDB,需要通过SecureCRT使用127.0.0.2本地IP代理。但是程
- dll的编写,首先是打开VS新建一个C++的控制台程序,下一步后选择dll以及空文档即可。然后就是添加一个类添加一个方法。方法排头固定格式
- 本文为大家分享了android studio3.4安装指南,供大家参考,具体内容如下1、双击运行Android Studio安装包,点击ne
- Android总体有五大布局:线性布局(LiearLayout): 屏幕垂直或水平方向布局。帧布局(FrameLayout):控件从屏幕左上
- 温故而知新网上说多进程的文章很多,不过基本都是在讨论很深的东西,这是需要去专研的,而我是来这篇是用来偷懒的(应用层次),记录的都是自己对多进
- 介绍本次设计的是一个有33个按钮的科学计算器。可以进行加,减,乘,除,开根号,阶乘,次方,百分号,对数,三角函数的计算。实现思路通过点击按钮
- org.junit.jupiter.api不存在解决方案spring boot2.2之后和之前的测试类编写方法不一致修改为:// A cod
- 本文实例讲述了C#实现文件断点续传下载的方法。分享给大家供大家参考。具体实现方法如下:using System;using System.D
- java 多线程死锁 相信有过多线程编程经验的朋友,都吃过死锁的苦。除非你不使用多线程,否则死锁的可能性会一直存在。为什么会出现
- 什么是局部类型?C# 2.0 引入了局部类型的概念。局部类型允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。局部