程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#重載重寫重構

C#重載重寫重構

編輯:C#入門知識

C#重載重寫重構


前言

前幾篇博客說了重寫和重載,今天主要說重構,順便比較一下三者。

重構、重寫、重載

重構就是通過調整程序代碼改善軟件的質量、性能,使其程序的設計模式和架構更趨合理,提高軟件的擴展性和維護性。通俗點說,重構,就是改善既有代碼的設計,讓代碼更加的符合面向對象規則。

而重寫是出現在多態裡的,virtual關鍵字聲明虛方法,子類通過override來實現方法重寫。在父類裡聲明了一個模糊的方法,並不給出具體的行為,在子類裡,通過重寫父類中的這個方法,讓這個方法實例化,去適合子類。

重載,通俗來講,它的作用就是可以讓我們的選擇更多,比如在類中聲明了一個方法,但是在我實際調用時,這個方法有時候符合我想要的,有時候不符合,就比如一個嬰兒出生,父母可能在出生前就想好了嬰兒的名字,也可能出生後也沒有想好,如果只用構造函數的話,只有一個方法,不能滿足我的要求,這時候就要用到方法重載,之前的的方法保留,再增加一個方法,接著這個例子,如果父母給嬰兒娶了名字,那麼,用原有的方法,如果沒有取名字,就會用重載後的方法。

例子

先說重構的例子。 接著上次的比賽。現在又來了小牛和小羊報名叫聲比賽,應該如何做呢?讓我們先來看一下在多態中是怎麼做的。 \ 現在,完全可以再創建兩個類,模仿狗和貓,繼承Animal。其他除了叫聲以外保持不變,這樣,完成後,能很完美的運行,並且有我們想要的功能。 但是,沒有錯誤不一定代表著優秀,我們發現,除了四種動物的叫聲不同外,其他幾乎沒有任何差異,這就犯了重復的毛病。 既然有重復的,就要把重復的提取出來放到Animal中,但是,Animal是個抽象的類,沒有具體的叫聲,我們就把叫聲部分改成另外一個方法:getShoutSound。接下來讓我們來實現一下。
class Animal
{
    ……
    public string Shout()
    {
        string result = "";
        for (int i = 0; i < shoutNum; i++)
            result += getShoutSound() + ",";
        return "我的名字叫" + name + " " + result;
    }
    protected virtual string getShoutSound()
    {
        //“得到叫聲”,虛方法,讓子類重寫,只需要給繼承的子類使用,所以用protected修飾符。
        return "";
    }
}
這時候子類就非常簡單了。比如,我們還讓貓來叫。
class Cat : Animal
{
    public Cat():base()
    {}
    public Cat(string name):base(name)
    {}
    protected override string getShoutSound()
    {
        return "喵"
    }
}
其余幾個動物都和貓一樣,改下叫聲就好了。雖然具體動物沒有了Shout方法,但是它繼承於Animal,Animal的Shout方法就可以被具體的動物繼承,當然,外界也也可以調用具體動物的這個方法。 這就是重構,發現了之前的代碼有錯誤,重復等,就重構代碼,使其更為出色的完成功能。

總結

這篇博客,本來想直接寫重構,但是,重構,重寫,重載,都有個重字,更應該比較著去學習它們,簡單來說,重構就是當你發現代碼的不優之處時,去修改它的結構,去優化它。重寫就是定義一個虛方法,子類去重寫,它可以不同名,而重載必須是同名的,他相當於什麼呢?我的理解就是,給你一個默認的方法,再給你一個其他方法,你可以使用默認的方法,也可以使用另外一個,但這兩個方法名是相同的。 通過總結這篇博客,我發現對比學習能更好的促使我們去發現,去記憶一些東西,分享給大家。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved