您好,登錄后才能下訂單哦!
一、重載
1、重載示意
重載(Overload)是重新加載的意思,指的是同一個類中同名,但是參數列表不同的方法組(返回值不能區別函數是否重載),重載沒有關鍵字。通俗點說重載是對內存中同一個類中的函數或方法進行重新加載的意思。
2、發生條件
必須發生在一個類中,函數名相同,參數類型或者個數不同構成重載,與返回類型無關。
如:
Public class Name { Public string GetName(string username) { Return username; } Public int GetName(int usercount) { Return usercount; } }
二、重寫
1、示意
重寫(Override)指子類修改父類中某個函數的函數體,需要重寫的父類中的函數必須是由virtual、abstract 或override標注的,不能重寫非虛方法或靜態方法。
Override是在繼承的時候,如果你寫的函數與要繼承的函數函數特征(函數特征包括函數名,參數的類型和個數)相同,那么,加上這個關鍵字,在使用這個子類的這個函數的時候就看不見父類(或超類)的函數了,它被覆蓋掉了。
2、發生條件
必須發生在基類和派生類中,基類函數必須用virtual、abstract 或override修飾,派生類用override修飾。
如:
class Program { static void Main(string[] args) { oc oa=new ob(); oa.b(1, 2); //輸出結果為fdfdf } public class oc { private int a; //封裝 public int geta { get { return a; } } public int seta { set { a = value; } } //函數b public virtual int b(int c, int e) { Console.WriteLine("{0}+{1}={2}", c, e, c + e); return c + e; } } //派生類ob,基類oc public class ob : oc { //重寫基類中的函數b public override int b(int c,int e) { Console.WriteLine("fdfdf"); return c; } } }
三、覆蓋
1、示意
覆蓋指重新定義子類中與父類具有相同函數特征的的函數體。子類中有一函數和父類中函數的函數特征相同,但函數體不同,稱為覆蓋。這種覆蓋又稱為隱藏,是隱藏父類中相同的函數,并沒有進行重寫。
2、發生條件
在子類中寫一個和基類一樣名字(參數不同也算)的非虛函數,會讓基類中的函數被隱藏,編譯后會提示要求使用New關鍵字。
如:
class Program { static void Main(string[] args) { oc oa=new ob(); oa.b(1, 2); //輸出結果為1+2=3 } public class oc { private int a; //封裝 public int geta { get { return a; } } public int seta { set { a = value; } } //函數b public int b(int c, int e) { Console.WriteLine("{0}+{1}={2}", c, e, c + e); return c + e; } } //派生類ob,基類oc public class ob : oc { //覆蓋,隱藏基類中的函數b public new int b(int c,int e) { Console.WriteLine("fdfdf"); return c; } } }
重寫(Override)的兩個函數的函數特征相同,應用在子類和父類中,會重寫父類函數;
重載(Overload)的兩個函數的函數名雖然相同,但函數特征不同,應用在同一類中;
覆蓋(new)兩個函數的函數名一定相同,但函數特征可相同也可不相同,應用在子類和父類中,會隱藏父類同名函數。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內容請查看下面相關鏈接
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。