C#中override和overload的區別

重載應該叫overload,重寫叫override;重載某個方法是在同一個類中發生的!重寫是在子類中重寫父類中的方法。

1.override:   父類:public virtual string ToString(){return "a";}
                   子類:public override string ToString(){return "b";}
2.overload:  同一類中或父子關係類中皆可.
                   public string ToString(){return "a";}
                   public string ToString(int id){return id.ToString();}
重寫(override)是用於重寫基類的虛方法,這樣在派生類中提供一個新的方法;

重載(overload)是提供了一種機制, 相同函數名通過不同的返回值類型以及參數來表來區分的機制
===================================================== 

很本質的區別就是看函數特徵:覆寫(Override)的兩個函數的函數特徵相同,重載(Overload)的兩個函數的函數名雖然相同,但函數特徵不同。
函數特徵包括函數名、參數的類型和個數。
Override 是在繼承的時候,如果你寫的函數與要繼承的函數函數特徵相同,那麼,加上這個關鍵字,在使用這個子類的這個函數的時候就看不見父類(或超類)的函數了,它被覆蓋掉了。
比如:Derived繼承了Base,Base裏面有void A(int a) ,那麼如果你Derived裏面覺得A寫得不好或不適合這個類,你想重新再寫一遍A裏的代碼,那麼就寫override void A(int a)這樣,原來的那個函數就被你新寫的這個覆蓋掉了。
overload 是重載,就是說函數名相同,函數特徵不同,系統會根據你提供的參數來調相應的函數。
比如:void A(int a)和void A(int a,int b)
如果你用的是A(1)那麼調的是第一個,如果是A(1,1)那麼調的是第二個。
=====================================================
1. 重寫(override)
------------------
使用 override 修飾符來修改方法、屬性、索引器或事件。重寫方法提供從基類繼承的成員的新實現。由重寫聲明重寫的方法稱爲重寫基方法。重寫基方法必須與重寫方法具有相同的簽名。
不能重寫非虛方法或靜態方法。重寫基方法必須是虛擬的、抽象的或重寫的。也就是說,用 override 修飾符重寫的基類中的方法必須是 virtual, abstract 或 override 方法。

2. 重載(overload)
------------------
當類包含兩個名稱相同但簽名不同的方法時發生方法重載。

使用重載方法的指南:
a. 用方法重載來提供在語義上完成相同功能的不同方法。
b. 使用方法重載而不是允許默認參數。默認參數的版本控制性能不好,因此公共語言規範(CLS)中不允許使用默認參數。
c. 正確使用默認值。在一個重載方法系列中,複雜方法應當使用參數名來指示從簡單方法中假定的默認狀態發生的更改。
d. 對方法參數使用一致的排序和命名模式。提供一組重載方法,這組重載方法帶有遞增數目的參數,以使開發人員可以指定想要的級別的信息,這種情況很常見。您指定的參數越多,開發人員就可指定得越詳細。
e. 如果必須提供重寫方法的能力,請僅使最完整的重載是虛擬的並根據它來定義其他操作。

下面這個例子代碼具體解釋一下這種模式,只有最後一個方法(參數最完整的方法)是虛方法,在繼承了這個類的子類中只要重寫(override)這個方法就行了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章