C#隱藏、C#重寫(xiě)、C#重載的區(qū)別
C#重載、C#重寫(xiě)和C#隱藏的定義
C#重載:同一個(gè)作用域內(nèi)發(fā)生(比如一個(gè)類(lèi)里面),定義一系列同名方法,但是方法的參數(shù)列表不同。這樣才能通過(guò)傳遞不同的參數(shù)來(lái)決定到底調(diào)用哪一個(gè)。而返回值類(lèi)型不同是不能構(gòu)成重載的。
C#重寫(xiě):繼承時(shí)發(fā)生,在子類(lèi)中重新定義父類(lèi)中的方法,子類(lèi)中的方法和父類(lèi)的方法是一樣的
例如:基類(lèi)方法聲明為virtual(虛方法),派生類(lèi)中使用override申明此方法的重寫(xiě).
C#隱藏:基類(lèi)方法不做申明(默認(rèn)為非虛方法),在派生類(lèi)中使用new聲明此方法的隱藏。
C#重載時(shí),根據(jù)參數(shù)選擇調(diào)用的方法;
C#重寫(xiě)時(shí),訪問(wèn)父類(lèi)子類(lèi)皆調(diào)用子類(lèi)的重寫(xiě)方法;
C#隱藏時(shí),訪問(wèn)父類(lèi)則調(diào)用父類(lèi)的方法,子類(lèi)子類(lèi)的方法。
C#隱藏(new)示例:
- using System;
- class A
- {
- public void F()
- {
- Console.WriteLine("A.F");
- }
- }
- class B: A
- {
- new public void F()
- {
- Console.WriteLine("B.F");
- }
- }
- class Test
- {
- static void Main(string[] args)
- {
- B b = new B();
- b.F();
- A a = b;
- a.F();
- }
- }
輸出為
B.F
A.F
C#重寫(xiě)virtual(虛方法)示例
- using System;
- class A
- {
- public virtual void F()
- {
- Console.WriteLine("A.F");
- }
- }
- class B: A
- {
- public override void F()
- {
- Console.WriteLine("B.F");
- }
- }
- class Test
- {
- static void Main()
- {
- B b = new B();
- b.F();
- A a = b;
- a.F();
- }
- }
輸出為
B.F
B.F
補(bǔ)充:重寫(xiě)override一般用于接口實(shí)現(xiàn)和繼承類(lèi)的方法改寫(xiě),要注意
1、覆蓋的方法的標(biāo)志必須要和被覆蓋的方法的標(biāo)志完全匹配,才能達(dá)到覆蓋的效果;
2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;
3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類(lèi);
4、被覆蓋的方法不能為private,否則在其子類(lèi)中只是新定義了一個(gè)方法,并沒(méi)有對(duì)其進(jìn)行覆蓋。
【編輯推薦】


















