C#中类的继承 override virtual new的作用以及代码分析
生活随笔
收集整理的這篇文章主要介紹了
C#中类的继承 override virtual new的作用以及代码分析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
繼承中override virtual new的作用
virtual ? ? 父類中需要注明允許重寫的方法;
override ? 子類中必須顯示聲明該方法是重寫的父類中的方法;
new ? ? ? ? 子類中忽略父類的已存在的方法,“重寫該方法“;
C#中不支持隱式重寫子類的方法
即如果父類方法沒有加virtual關(guān)鍵字,即不是一個(gè)虛方法,則在子類中只能隱藏基類方法(new),而不能覆蓋(override);
代碼分析
這是一個(gè)base類A有很多子類:
1 class A 2 { 3 public virtual void Movie() 4 { 5 Console.WriteLine("MikiMouse"); 6 } 7 } 8 9 class B : A 10 { 11 public override void Movie() 12 { 13 Console.WriteLine("DisneyMovie"); 14 } 15 } 16 17 class C : B 18 { 19 public new virtual void Movie() 20 { 21 Console.WriteLine("Snow White"); 22 } 23 } 24 25 class D : C 26 { 27 public override void Movie() 28 { 29 Console.WriteLine("Seven Dwarfs"); 30 } 31 }
?
主函數(shù)其實(shí)也是一個(gè)靜態(tài)(static)的入口函數(shù):
1 static void Main(string[] args) 2 { 3 A objA = new D(); 4 A objB = new B(); 5 C objC = new D(); 6 A objD = new A(); 7 objA.Movie(); 8 objB.Movie(); 9 objC.Movie(); 10 objD.Movie(); 11 }
?
其中:
A objA = new D(); objA.Movie();
這樣用A定義的objA分配的是子類D的空間;
調(diào)用Movie()時(shí)先看A中的Movie()是虛函數(shù)(virtual),所以看A的下一級B,B被override修飾;
所以B中的Movie()覆蓋A的函數(shù),所以輸出的應(yīng)該是B中的DisneyMovie;
同理最終輸出如下:
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/Elson8080/p/4378947.html
總結(jié)
以上是生活随笔為你收集整理的C#中类的继承 override virtual new的作用以及代码分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 乌镇可以带狗狗进去吗
- 下一篇: 写给自己的web开发资源