1. 程式人生 > >過載、重寫、重構

過載、重寫、重構

【前言】

在之前我們接觸過重寫、過載。今天我們學習到了重構,那麼他們三者有什麼區別呢?下面將為您揭曉

【正文】

一、重構

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 "喵";
        }

    }

這樣當我們再增加動物的時候,只需要給子類當中的叫聲方法就可以了。這樣寫是不是更簡便呢,也符合面向物件的原則。

二、重寫

重寫就是在父類當中定義一個虛方法,然後子類去重寫,來實現自己的功能。方法名、引數、返回值必須是同樣的。

三、過載

方法過載提供了建立同名的多個方法的能力,但這些方法需要使用不同的引數型別。

比如現在有許多小貓出生,有的要起名字,有的不需要起名字。那麼我們就可以用方法過載。

 

現在我們知道了重寫、過載、重寫所存在的意義了,其實他們都是為了讓程式更好的實現面向物件的原則。