【C#】五分钟搞懂重写和重载
在开发机房重构的过程中,博主一直在重复两件事情,重写和重载。刚刚接触这两个概念的时候也是很蒙逼,但是随着学习的深入,现在对这两个词的概念算是能够区分开了。今天就来说一说重写和重载。
重写(override)
在C#中,派生类可以继承基类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动得继承基类的方法,而是想做一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
例如,假设动物类存在“叫”的方法,从中派生出猫和狗,猫和狗叫的形式是不一样的,因此同样的方法需要两种不同的实现,这就需要“重写编写”基类中的方法。“重写”基类方法就是修改它的实现或者说在派生类中重新编写。
简单代码展示:
Public class shout
{
Public void doShout()
{
//叫的抽象方法
}
}
Public class catShout:shout
{
Public void doShout()
{
//猫叫的方法
}
}
Public class dogShout:shout
{
Public void doShout()
{
//狗叫的方法
}
}
总结:
- 必须在继承里
- 方法名、参数个数和参数类型必须相同
- 派生类重写的方法的访问权限不能低于基类的权限
- 派生类抛出的异常应该和基类相等或比基类更小
重载(overload)
简单说,就是函数或者方法有相通的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
回想当年,你在高中努力奋斗,精力十足,最终考上大学。然而现在让你回到之前的高中学习,但此时,再也考不上当年的大学。同样的学校(类),同样的学习方式(方法),因为条件改变了(参数类型),就再也考不上当年的大学了(返回结果),这时候你考大学就被重载了。
简单代码演示:
Public class artist
{
Public void perform(instrument) { //play instrument }
Public void perform(song) { //sing songs }
Public void perform(movie) { //play movies }
}
总结:
- 必须同一个类,方法名相同。
- 重载的参数列表不同,与参数列表的顺序无关。
- 可以抛出基类没有的异常。
- 在方法重载中,返回值类型可以不同。
区别
好了,搞明白之后我们来看一看重载和重写的区别吧。