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

作者:lijiao 时间:2023-11-01 17:43:05 

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

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

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#,重载,重写
0
投稿

猜你喜欢

  • 遍历Hashtable 的几种方法

    2023-07-18 13:49:11
  • 关于Feign调用服务Headers传参问题

    2022-10-31 01:48:24
  • Android开发使用Databinding实现关注功能mvvp

    2023-07-23 19:27:32
  • 详解Java 中 RMI 的使用

    2023-10-12 08:31:27
  • Android ProgressDialog进度条使用详解

    2022-09-24 17:06:03
  • Javaweb开发环境Myeclipse6.5 JDK1.6 Tomcat6.0 SVN1.8配置教程

    2023-11-15 21:47:05
  • Spring Boot 集成Dubbo框架实例

    2022-02-03 21:23:27
  • Android巧用ActionBar实现下拉式导航

    2023-12-02 04:00:59
  • Spring Boot2.0 @ConfigurationProperties使用详解

    2021-06-11 17:21:30
  • Java重点梳理类与对象核心原理

    2023-04-08 06:15:41
  • java实现超市管理系统

    2022-06-23 13:19:06
  • 最简单易懂的java数组排序方法整理

    2023-01-03 18:56:41
  • C# Chart控件标记问题详解

    2023-01-23 03:37:35
  • 实例分析java开启线程的方法

    2022-06-24 19:54:00
  • timespan使用方法详解

    2022-01-19 07:04:50
  • 从此不再惧怕URI编码 JavaScript及C# URI编码详解

    2022-11-03 00:17:46
  • C++类中的特殊成员函数示例详解

    2023-11-07 13:02:08
  • Flutter实现顶部导航栏功能

    2023-03-10 17:13:48
  • 使用Java和WebSocket实现网页聊天室实例代码

    2023-11-26 00:16:02
  • C#异步的世界(上)

    2021-09-21 06:01:43
  • asp之家 软件编程 m.aspxhome.com