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

标签:c#,重载,重写,覆盖
0
投稿

猜你喜欢

  • 消息中间件详解以及比较选择

    2022-08-17 03:01:01
  • c#实现获取字符串阵列中元素最长或最短的长度

    2022-08-22 08:54:01
  • springboot使用redisRepository和redistemplate操作redis的过程解析

    2023-10-11 06:57:03
  • 详解怎么用Java的super关键字

    2021-10-06 08:11:14
  • Java用freemarker导出word实用示例

    2022-06-05 17:16:32
  • Android切面编程知识点详解

    2023-05-05 04:18:04
  • Android Monkey压力测试详细介绍

    2021-10-24 08:02:37
  • android底层去掉虚拟按键的实例讲解

    2022-01-29 17:53:14
  • Java 多线程使用要点分析

    2023-12-18 22:41:36
  • monkeyrunner之安卓开发环境搭建教程(1)

    2023-02-24 06:24:22
  • java实现网站微信扫码支付

    2023-06-18 18:58:19
  • 利用maven引入第三方jar包以及打包

    2023-11-15 04:23:17
  • Android开发中给EditText控件添加TextWatcher监听实现对输入字数的限制(推荐)

    2023-01-19 23:52:35
  • 深入解析JVM对dll文件和对类的装载过程

    2023-06-14 23:23:33
  • Android以对话框形式制作数字软键盘示例

    2022-12-07 07:37:03
  • Java深度复制功能与用法实例分析

    2023-07-05 11:23:17
  • Android巧用XListView实现万能下拉刷新控件

    2023-07-25 00:33:03
  • 一文详解Jetpack Android新一代导航管理Navigation

    2022-12-08 20:40:14
  • Java中的回调

    2023-11-16 01:55:58
  • Android编辑框EditText与焦点变更监视器及文本变化监视器实现流程详解

    2021-06-21 04:48:14
  • asp之家 软件编程 m.aspxhome.com