C# new和override的區(qū)別分析
昨天面試問到了new的幾種用法以及與Override的區(qū)別,有點模糊
回來google下,new的用法有以下3中
1、運算符:初始化對象和調(diào)用構造函數(shù)
2、修飾符:隱藏基類方法
3、于在泛型聲明中約束可能用作類型參數(shù)的參數(shù)的類型
至于作為修飾符和override的區(qū)別,看了下文章不太明白,寫了個例子,運行結果,發(fā)現(xiàn)了差異,下面分享下代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { abstract public class Test { public virtual void Prinf() { Console.WriteLine("Abstract Printf..."); } } public class Class1 : Test { public override void Prinf() { Console.WriteLine("Class One Override Printf..."); } } public class Class2 : Test { public new void Prinf() { Console.WriteLine("Class Two New Printf..."); } } static void Main(string[] args) { Class1 cls1 = new Class1(); Class2 cls2 = new Class2(); cls1.Prinf(); cls2.Prinf(); ((Test)cls1).Prinf(); ((Test)cls2).Prinf(); Console.ReadLine(); } } }
運行結果如下:
相信大家也看明白了,原來是這樣
new隱藏基類方法后,通過轉(zhuǎn)換為基類型,仍然可以調(diào)用基類的虛方法;
而override則完全將基類的方法進行了重寫,即使將子類型轉(zhuǎn)換為基類型,調(diào)用的仍然是重寫后的方法。。。
所以new 是隱藏基類方法,而Override是重寫基類方法咯
override是指“覆蓋”,是指子類覆蓋了父類的方法。子類的對象無法再訪問父類中的該方法。new是指“隱藏”,是指子類隱藏了父類的方法,當然,通過一定的轉(zhuǎn)換,可以在子類的對象中訪問父類的方法。所以說C# new和override的區(qū)別是覆蓋和隱藏
以下是代碼:
class Base { public virtual void F1() { Console.WriteLine("Base's virtual function F1"); } public virtual void F2() { Console.WriteLine("Base's virtual fucntion F2"); } } class Derived:Base { public override void F1() { Console.WriteLine("Derived's override function F1"); } public new void F2() { Console.WriteLine("Derived's new function F2"); } } class Program { public static void Main(string[] args) { Base b1 = new Derived(); //由于子類覆蓋了父類的方法,因此這里調(diào)用的是子類的F1方法。也是OO中多態(tài)的體現(xiàn) b1.F1(); //由于在子類中用new隱藏了父類的方法,因此這里是調(diào)用了隱藏的父類方法 b1.F2(); } }
相關文章
ASP.NET AJAX 4.0的模版編程(Template Programming)介紹
不過當我評估ASP.NET AJAX 4.0的時候,我確實被它的特征給震住了。新的特征完全專注于瀏覽器技術,比如XHTML和javascript。 我非常欽佩ASP.NET AJAX小組。2009-07-07用.NET 2.0壓縮/解壓功能處理大型數(shù)據(jù)
用.NET 2.0壓縮/解壓功能處理大型數(shù)據(jù)...2006-09-09ASP.NET2.0使用Enter Key作為默認提交問題分析(附源碼)
這篇文章主要介紹了ASP.NET2.0使用Enter Key作為默認提交,結合實例形式分析了ASP.NET2.0使用Enter Key默認提交的注意事項與相關實現(xiàn)技巧,并附上源碼供讀者參考,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11asp.net中利用Jquery+Ajax+Json實現(xiàn)無刷新分頁的實例代碼
本篇文章主要是對asp.net中利用Jquery+Ajax+Json實現(xiàn)無刷新分頁的實例代碼進行了介紹,需要的朋友可以過來參考下,需要對大家有所幫助2014-02-02DotNet OnPreRender(EventArgs e) 事件常用的方法
DotNet OnPreRender(EventArgs e) 事件常用的方法,需要的朋友可以參考下。2011-07-07