浅谈C#重载与重写的区别

前言:在之前的博文中,我总结过重载与重写的区别与用法,本博文算是一个系统的概述与总结。

一、重载与重写的区别

  1. 重载必须在同一个类,重写在派生类。
  2. 重载方法名,参数列表必须不同,返回值类型可不同。重写的两个方法返回值、方法名、参数列表必须完全一致。
  3. 重写子类异常不能超过父类相应方法抛出的异常。
  4. 重写子类访问级别不能低于父类相应方法的访问级别。
  5. 关键字: 重写(override)、重载(overload)。
  6. 可在子类中被重写的方法一定要被标记成virtualabstract的函数就是为了重写而创建的,标记为override的函数本身是由前两种函数重写而来的,故也可被重写。声明虚方法或抽象方法,说明方法可被而非必需被派生类重写。
  7. 重写的函数必须在子类中出现,而且任何一个父类的函数在其一个子类中只能被重写一次。

二、重载与重写的特征

1、重载

  1. 重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
  2. 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
  3. 最常用的地方就是构造器的重载。

2、重写

  1. 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
  2. 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
  3. 重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。

3、特征
浅谈C#重载与重写的区别

三、重载与重写的对比

浅谈C#重载与重写的区别
注:以上图片来自于:菜鸟教程,本文仅是引用!