C#中重载重写和覆盖的定义与区别

所属分类: 软件编程 / C#教程 阅读数: 120
收藏 0 赞 0 分享

一、重载

  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)两个函数的函数名一定相同,但函数特征可相同也可不相同,应用在子类和父类中,会隐藏父类同名函数。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

更多精彩内容其他人还在看

c#开发word批量转pdf源码分享

已经安装有Office环境,借助一些简单的代码即可实现批量Word转PDF,看下面的实例源码吧
收藏 0 赞 0 分享

c# xml API操作的小例子

这篇文章主要介绍了c# xml API操作的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

c#唯一值渲染实例代码

这篇文章主要介绍了c#唯一值渲染实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

淘宝IP地址库采集器c#代码

这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C#在后台运行操作(BackgroundWorker用法)示例分享

BackgroundWorker类允许在单独的专用线程上运行操作。如果需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用BackgroundWorker类方便地解决问题,下面看示例
收藏 0 赞 0 分享

c#文本加密程序代码示例

这是一个加密软件,但只限于文本加密,加了窗口控件的滑动效果,详细看下面的代码
收藏 0 赞 0 分享

c#生成站点地图(SiteMapPath)文件示例程序

这篇文章主要介绍了c#生成站点地图(SiteMapPath)文件的示例,大家参考使用
收藏 0 赞 0 分享

C# 键盘Enter键取代Tab键实现代码

这篇文章主要介绍了C# 键盘Enter键取代Tab键实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C# WinForm导出Excel方法介绍

在.NET应用中,导出Excel是很常见的需求,导出Excel报表大致有以下三种方式:Office PIA,文件流和NPOI开源库,本文只介绍前两种方式
收藏 0 赞 0 分享

C#串口通信程序实例详解

在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports,创建C#串口通信程序的具体实现是如何的呢?让我们开始吧
收藏 0 赞 0 分享
查看更多