C#中重载与重写区别分析

 更新时间:2016年02月16日 16:03:44   投稿:lijiao  
这篇文章主要为大家详细介绍了C#中重载与重写的区别,感兴趣的小伙伴们可以参考一下

一、前言
       接触面向对象的思想已经有一段时光了,为什么要学习面向对象呢?因为面向对象具有可复用性、可维护性、可扩展性等优点。
        本人之前一直接触的是VB语言,所以正式接触面向对象的编程语言还要从C#开始。前段时间,刚学完C#,其中重载、重写傻傻分不清楚。如今通过查阅资料对这两者有了一个大概的理解,不足之处还请多多指教。
二、定义
        重载:在同一定义域内(比如一个类里面)。方法名相同,参数个数、次序、类型不同。因此重载对返回值没有要求,可以相同,也可以不同。但是如果方法名相同,参数个数、次序、类型都相同,而返回值不同,则无法构成重载。
       重写:继承时发生,在子类中重写定义父类中的方法,子类中的方法和父类中的方法是一样的。即方法名、参数的个数、次序、类型和返回值都相同。例如父类方法声明为virtual(虚方法),子类中使用override申明此方法的重写。
三、示例
1、重载:
       我们建立一个猫类,在这个类中构造两个方法。一个是带参数姓名的方法,另一个是不带参数姓名的方法。这样当我们初始化一个“猫”的对象时,就可以选择给对象起名或者不起名。从而达到扩展的目的。

2、 重写:
       比如动物都有“叫”的方法。猫和狗是它的子类,猫的叫声是“喵”,狗的叫声是“汪”,如何在子类中重写父类的方法呢?首先在动物类中构造一个虚方法。

Class Animal 
{ 
   public virtual string Shout()//注意修饰符中增加了一个virtual,它表示此方法是虚方法,可以被子类重写 
   { 
   return ""; 
   } 
} 

         在构建猫这个类时,我们重写“叫”这个方法

Class cat:Animail 
{ 
  Public override string Shout() 
  {//关键字override,表示方法重写 
  string result="喵"; 
  return result; 
  } 
} 

        在构建狗这个类时,我们也重写“叫”这个方法

Class Dog:Animal 
{ 
  public override string Shout() 
  { 
   string result="汪"; 
   return result; 
   } 
   
} 

           重写发生在父类和子类之间,声明的是父类,实例化的是子类。本例子实现了多态。
四、小结

         重载必须发生在一个类中,方法名相同,参数不同。值得注意的是,方法重载必须通过参数不同来判断调用哪个方法,而不能通过返回值。
         重写override一般用于接口实现和继承类的方法改写。值得注意的是,被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有进行覆盖。

以上就是本文的全部内容,希望大家对C#中重载与重写的异同有所了解,谢谢大家的阅读。

相关文章

  • C#实现创建标签PDF文件的示例代码

    C#实现创建标签PDF文件的示例代码

    标签PDF文件包含描述文档结构和各种文档元素顺序的元数据,是一种包含后端提供的可访问标记,管理阅读顺序和文档内容表示的逻辑结构的PDF文件。本文将用C#实现创建标签PDF文件,需要的可以参考一下
    2022-08-08
  • 详解C#借助.NET框架中的XmlTextReader类读取XML的方法

    详解C#借助.NET框架中的XmlTextReader类读取XML的方法

    这篇文章主要介绍了详解借助.NET框架中的XmlTextReader类读取XML的方法,这种方式的执行效率还是比较令人满意的,需要的朋友可以参考下
    2016-04-04
  • C#操作XML文件步骤

    C#操作XML文件步骤

    在本篇文章里小编给大家分享了关于C#操作XML文件步骤教学内容,有兴趣的朋友们可以学习下。
    2019-01-01
  • C# 中的委托与事件机制详解

    C# 中的委托与事件机制详解

    本文详细介绍了C#中委托和事件的概念、使用方法和应用场景,包括委托定义、匿名方法、Lambda表达式、事件机制和多播委托的详细说明,委托作为类型安全的函数指针,文章还探讨了如何通过匿名方法和Lambda表达式简化委托的使用,以及多播委托在事件处理中的应用
    2024-10-10
  • WinForm窗体调用WCF服务窗体卡死问题

    WinForm窗体调用WCF服务窗体卡死问题

    在Winform窗体中调用部署在其他服务器中的WCF服务时,由于调用服务需要一定时延,因此窗体在这段时间一直卡住不能进行其他操作
    2012-12-12
  • 详解C#App.config和Web.config加密

    详解C#App.config和Web.config加密

    本篇文章给大家分享了C#App.config和Web.config加密的相关知识点以及具体代码步骤,有兴趣的朋友参考学习下。
    2018-05-05
  • 在C#程序中对MessageBox进行定位的方法

    在C#程序中对MessageBox进行定位的方法

    这篇文章主要介绍了在C#程序中对MessageBox进行定位的方法,针对图形化界面进行调试,需要的朋友可以参考下
    2015-07-07
  • 详解如何在C#中循环访问目录树

    详解如何在C#中循环访问目录树

    在C#中,访问文件系统是常见的需求之一,有时我们需要遍历目录树以执行某些操作,例如搜索文件、计算目录大小或执行批量处理,本文将详细介绍如何在C#中循环访问目录树,并提供一个完整的示例,需要的朋友可以参考下
    2024-08-08
  • 用Newtonsoft将json串转为对象的方法(详解)

    用Newtonsoft将json串转为对象的方法(详解)

    下面小编就为大家带来一篇用Newtonsoft将json串转为对象的方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • C#中的一些延时函数

    C#中的一些延时函数

    这篇文章主要介绍了C#中的一些延时函数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06

最新评论