【前言】
在之前我们接触过重写、重载。今天我们学习到了重构,那么他们三者有什么区别呢?下面将为您揭晓
【正文】
一、重构
1.重构是什么?
重构就是改善现有的代码设计,让代码更加符合面向对象规则
2.怎么修改代码的设计?
示例:
上次我们说到小狗和小猫来报名参加叫声比赛,如今又来了小羊和小牛来报名叫声比赛,我们可以继续写一个牛类和羊类,然后来继承动物类,这样利用多态显然是可以实现的。但是我们发现在写代码的过程中,子类当中有很多代码是重复的。那么怎么才能更好的让我们的程序能体现面向对象的规则呢,我们可以利用重构来解决这个问题。
首先我们把重复的这个Shout()的方法体放到动物类中,去掉virtual 。然后把声音叫的部分改成另一个方法getShoutSound
class Animal
{
protected string name;
public Animal(string name)
{
this.name = name;
}
public Animal()
{
this.name = "无名";
}
public string Shout()
{
string result = "";
result += getShoutSound() + ",";
return "我的名字叫" + name + "" + result;
}
// 得到叫声的虚方法,让子类与重写。
protected virtual string getShoutSound()
{
return "";
}
}
class Cat :Animal
{
public Cat ():base()
{
}
public Cat (string name):base( name)
{
}
//重写父类的方法,返回叫声
protected override string getShoutSound()
{
return "喵";
}
}
这样当我们再增加动物的时候,只需要给子类当中的叫声方法就可以了。这样写是不是更简便呢,也符合面向对象的原则。
二、重写
重写就是在父类当中定义一个虚方法,然后子类去重写,来实现自己的功能。方法名、参数、返回值必须是同样的。
三、重载
方法重载提供了创建同名的多个方法的能力,但这些方法需要使用不同的参数类型。
比如现在有许多小猫出生,有的要起名字,有的不需要起名字。那么我们就可以用方法重载。
现在我们知道了重写、重载、重写所存在的意义了,其实他们都是为了让程序更好的实现面向对象的原则。