重載應(yīng)該叫overload,重寫叫override,;重載某個(gè)方法是在同一個(gè)類中發(fā)生的,!重寫是在子類中重寫父類中的方法,。 1.override: 父類:public virtual string ToString(){return "a";} 子類:public override string ToString(){return "b";} 2.overload: 同一類中或父子關(guān)系類中皆可. public string ToString(){return "a";} public string ToString(int id){return id.ToString();} 重寫(override)是用于重寫基類的虛方法,這樣在派生類中提供一個(gè)新的方法,; 重載(overload)是提供了一種機(jī)制, 相同函數(shù)名通過不同的返回值類型以及參數(shù)來表來區(qū)分的機(jī)制 =====================================================
很本質(zhì)的區(qū)別就是看函數(shù)特征:覆寫(Override)的兩個(gè)函數(shù)的函數(shù)特征相同,,重載(Overload)的兩個(gè)函數(shù)的函數(shù)名雖然相同,,但函數(shù)特征不同,。 函數(shù)特征包括函數(shù)名、參數(shù)的類型和個(gè)數(shù),。 Override 是在繼承的時(shí)候,,如果你寫的函數(shù)與要繼承的函數(shù)函數(shù)特征相同,那么,,加上這個(gè)關(guān)鍵字,,在使用這個(gè)子類的這個(gè)函數(shù)的時(shí)候就看不見父類(或超類)的函數(shù)了,它被覆蓋掉了,。 比如:Derived繼承了Base,,Base里面有void A(int a) ,那么如果你Derived里面覺得A寫得不好或不適合這個(gè)類,,你想重新再寫一遍A里的代碼,,那么就寫override void A(int a)這樣,原來的那個(gè)函數(shù)就被你新寫的這個(gè)覆蓋掉了,。 overload 是重載,,就是說函數(shù)名相同,函數(shù)特征不同,,系統(tǒng)會(huì)根據(jù)你提供的參數(shù)來調(diào)相應(yīng)的函數(shù),。 比如:void A(int a)和void A(int a,int b) 如果你用的是A(1)那么調(diào)的是第一個(gè),如果是A(1,1)那么調(diào)的是第二個(gè),。 ===================================================== 1. 重寫(override) ------------------ 使用 override 修飾符來修改方法,、屬性、索引器或事件,。重寫方法提供從基類繼承的成員的新實(shí)現(xiàn),。由重寫聲明重寫的方法稱為重寫基方法,。重寫基方法必須與重寫方法具有相同的簽名。 不能重寫非虛方法或靜態(tài)方法,。重寫基方法必須是虛擬的,、抽象的或重寫的,。也就是說,,用 override 修飾符重寫的基類中的方法必須是 virtual, abstract 或 override 方法。
2. 重載(overload) ------------------ 當(dāng)類包含兩個(gè)名稱相同但簽名不同的方法時(shí)發(fā)生方法重載,。
使用重載方法的指南: a. 用方法重載來提供在語義上完成相同功能的不同方法,。 b. 使用方法重載而不是允許默認(rèn)參數(shù)。默認(rèn)參數(shù)的版本控制性能不好,,因此公共語言規(guī)范(CLS)中不允許使用默認(rèn)參數(shù),。 c. 正確使用默認(rèn)值。在一個(gè)重載方法系列中,,復(fù)雜方法應(yīng)當(dāng)使用參數(shù)名來指示從簡(jiǎn)單方法中假定的默認(rèn)狀態(tài)發(fā)生的更改,。 d. 對(duì)方法參數(shù)使用一致的排序和命名模式。提供一組重載方法,,這組重載方法帶有遞增數(shù)目的參數(shù),,以使開發(fā)人員可以指定想要的級(jí)別的信息,這種情況很常見,。您指定的參數(shù)越多,,開發(fā)人員就可指定得越詳細(xì)。 e. 如果必須提供重寫方法的能力,,請(qǐng)僅使最完整的重載是虛擬的并根據(jù)它來定義其他操作,。
下面這個(gè)例子代碼具體解釋一下這種模式,只有最后一個(gè)方法(參數(shù)最完整的方法)是虛方法,,在繼承了這個(gè)類的子類中只要重寫(override)這個(gè)方法就行了,。 View Code
|