C#中重写(override)和覆盖(new)的区别
生活随笔
收集整理的這篇文章主要介紹了
C#中重写(override)和覆盖(new)的区别
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
重寫 override
用關(guān)鍵字 virtual 修飾的方法,叫虛方法。
可以在子類中用override 聲明同名的方法,這叫“重寫”。
相應(yīng)的,沒有用virtual修飾的方法,我們叫它實方法。
重寫會改變父類方法的功能。
覆蓋 new
在子類中用 new 關(guān)鍵字修飾 定義的與父類中同名的方法,叫覆蓋。
覆蓋不會改變父類方法的功能。
代碼示例
直接上代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp1 {class Program{public static void Main(string[] args){Dog d = new Dog(); //override 重寫 會改變父類的功能Cat c = new Cat(); //new 覆蓋 不會改變父類的功能d.Say();//調(diào)用override的方法c.Say();//調(diào)用new的方法Animal a;a = c; //a與c指向同一對象,但c是作為Cat類訪問,而a是作為Animal類訪問c.Say();//此時調(diào)用的子類cat中的方法a.Say();//此時調(diào)用的是父類animal中的方法a = d; //a與d都作為Dog類訪問d.Say();//此時調(diào)用的是override的方法a.Say();//此時調(diào)用的是override的方法Animal d1 = new Dog();//當(dāng)用子類創(chuàng)建父類的時候,override重寫會改變父類的功能d1.Say();Animal c1 = new Cat();//當(dāng)用子類創(chuàng)建父類的時候,new覆蓋不會改變父類的功能c1.Say();}}public class Animal{public virtual void Say(){Console.WriteLine("Hello,Animal");}}public class Dog : Animal{public override void Say(){Console.WriteLine("Hello,Dog");}}public class Cat : Animal{public new void Say(){Console.WriteLine("Hello,Cat");}} }輸出結(jié)果:
Hello,Dog
Hello,Cat
Hello,Cat
Hello,Animal
Hello,Dog
Hello,Dog
Hello,Dog
Hello,Animal
總結(jié)
以上是生活随笔為你收集整理的C#中重写(override)和覆盖(new)的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# (逻辑与) ||(逻辑或)优先
- 下一篇: C# 选择按钮 数字排序 找最大值最小值