C#隱藏、C#重寫、C#重載的區(qū)別
C#重載、C#重寫和C#隱藏的定義
C#重載:同一個作用域內(nèi)發(fā)生(比如一個類里面),定義一系列同名方法,但是方法的參數(shù)列表不同。這樣才能通過傳遞不同的參數(shù)來決定到底調(diào)用哪一個。而返回值類型不同是不能構(gòu)成重載的。
C#重寫:繼承時發(fā)生,在子類中重新定義父類中的方法,子類中的方法和父類的方法是一樣的
例如:基類方法聲明為virtual(虛方法),派生類中使用override申明此方法的重寫.
C#隱藏:基類方法不做申明(默認為非虛方法),在派生類中使用new聲明此方法的隱藏。
C#重載時,根據(jù)參數(shù)選擇調(diào)用的方法;
C#重寫時,訪問父類子類皆調(diào)用子類的重寫方法;
C#隱藏時,訪問父類則調(diào)用父類的方法,子類子類的方法。
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#重寫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
補充:重寫override一般用于接口實現(xiàn)和繼承類的方法改寫,要注意
1、覆蓋的方法的標志必須要和被覆蓋的方法的標志完全匹配,才能達到覆蓋的效果;
2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;
3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;
4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,并沒有對其進行覆蓋。
【編輯推薦】