過載、重寫、重構
阿新 • • 發佈:2019-01-02
【前言】
在之前我們接觸過重寫、過載。今天我們學習到了重構,那麼他們三者有什麼區別呢?下面將為您揭曉
【正文】
一、重構
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 "喵"; } }
這樣當我們再增加動物的時候,只需要給子類當中的叫聲方法就可以了。這樣寫是不是更簡便呢,也符合面向物件的原則。
二、重寫
重寫就是在父類當中定義一個虛方法,然後子類去重寫,來實現自己的功能。方法名、引數、返回值必須是同樣的。
三、過載
方法過載提供了建立同名的多個方法的能力,但這些方法需要使用不同的引數型別。
比如現在有許多小貓出生,有的要起名字,有的不需要起名字。那麼我們就可以用方法過載。
現在我們知道了重寫、過載、重寫所存在的意義了,其實他們都是為了讓程式更好的實現面向物件的原則。