激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - ASP.NET教程 - C# new和override的區(qū)別分析

C# new和override的區(qū)別分析

2019-10-27 11:21C#教程網(wǎng) ASP.NET教程

C# new和override都會(huì)覆蓋父類(lèi)中的方法。那它們兩者之前有什么區(qū)別呢?

昨天面試問(wèn)到了new的幾種用法以及與Override的區(qū)別,有點(diǎn)模糊

回來(lái)google下,new的用法有以下3中

1、運(yùn)算符:初始化對(duì)象和調(diào)用構(gòu)造函數(shù)

2、修飾符:隱藏基類(lèi)方法

3、于在泛型聲明中約束可能用作類(lèi)型參數(shù)的參數(shù)的類(lèi)型

至于作為修飾符和override的區(qū)別,看了下文章不太明白,寫(xiě)了個(gè)例子,運(yùn)行結(jié)果,發(fā)現(xiàn)了差異,下面分享下代碼:

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5.    
  6. namespace ConsoleApplication1 
  7.   class Program 
  8.   { 
  9.     abstract public class Test 
  10.     { 
  11.       public virtual void Prinf() 
  12.       { 
  13.         Console.WriteLine("Abstract Printf..."); 
  14.       } 
  15.    
  16.     } 
  17.     public class Class1 : Test 
  18.     { 
  19.       public override void Prinf() 
  20.       { 
  21.            
  22.         Console.WriteLine("Class One Override Printf..."); 
  23.       } 
  24.     } 
  25.     public class Class2 : Test 
  26.     { 
  27.       public new void Prinf() 
  28.       { 
  29.            
  30.         Console.WriteLine("Class Two New Printf..."); 
  31.       } 
  32.     } 
  33.    
  34.     static void Main(string[] args) 
  35.     { 
  36.       Class1 cls1 = new Class1(); 
  37.       Class2 cls2 = new Class2(); 
  38.       cls1.Prinf(); 
  39.       cls2.Prinf(); 
  40.       ((Test)cls1).Prinf(); 
  41.       ((Test)cls2).Prinf(); 
  42.       Console.ReadLine(); 
  43.     } 
  44.   } 

運(yùn)行結(jié)果如下:

C# new和override的區(qū)別分析

相信大家也看明白了,原來(lái)是這樣

new隱藏基類(lèi)方法后,通過(guò)轉(zhuǎn)換為基類(lèi)型,仍然可以調(diào)用基類(lèi)的虛方法;

而override則完全將基類(lèi)的方法進(jìn)行了重寫(xiě),即使將子類(lèi)型轉(zhuǎn)換為基類(lèi)型,調(diào)用的仍然是重寫(xiě)后的方法。。。

所以new 是隱藏基類(lèi)方法,而Override是重寫(xiě)基類(lèi)方法咯

override是指“覆蓋”,是指子類(lèi)覆蓋了父類(lèi)的方法。子類(lèi)的對(duì)象無(wú)法再訪問(wèn)父類(lèi)中的該方法。new是指“隱藏”,是指子類(lèi)隱藏了父類(lèi)的方法,當(dāng)然,通過(guò)一定的轉(zhuǎn)換,可以在子類(lèi)的對(duì)象中訪問(wèn)父類(lèi)的方法。所以說(shuō)C# new和override的區(qū)別是覆蓋和隱藏

以下是代碼:

  1. class Base  
  2.     public virtual void F1()  
  3.     { 
  4.         Console.WriteLine("Base's virtual function F1"); 
  5.     } 
  6.     public virtual void F2()  
  7.     { 
  8.         Console.WriteLine("Base's virtual fucntion F2"); 
  9.     } 
  10. class Derived:Base  
  11.     public override void F1()  
  12.     { 
  13.         Console.WriteLine("Derived's override function F1"); 
  14.     } 
  15.     public new void F2()  
  16.     { 
  17.         Console.WriteLine("Derived's new function F2"); 
  18.     } 
  19. class Program  
  20.     public static void Main(string[] args)  
  21.     { 
  22.         Base b1 = new Derived(); 
  23.         //由于子類(lèi)覆蓋了父類(lèi)的方法,因此這里調(diào)用的是子類(lèi)的F1方法。也是OO中多態(tài)的體現(xiàn)  
  24.         b1.F1(); 
  25.         //由于在子類(lèi)中用new隱藏了父類(lèi)的方法,因此這里是調(diào)用了隱藏的父類(lèi)方法  
  26.         b1.F2(); 
  27.     } 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲人成中文字幕在线观看 | 亚洲欧美不卡视频 | 超污视频在线看 | 亚洲第一综合 | 免费91在线 | 久久久久在线观看 | 欧美成人免费电影 | 亚洲特黄a级毛片在线播放 激情视频免费看 | 久久久久夜色精品国产老牛91 | av噜噜在线| 狠狠婷婷综合久久久久久妖精 | 91懂色 | 午夜精品小视频 | 久久久资源网 | free japan xxxxhdsex69| 亚洲欧美国产高清 | 中文字幕偷拍 | 国产成人精品一区在线播放 | 一区国产在线观看 | 亚洲国产成人久久一区www妖精 | 九九热精品在线 | 欧美一级片免费在线观看 | 日韩黄色免费观看 | 九九色在线观看 | 黄色片网站免费看 | 99热99精品 | 成人男女啪啪免费观看网站四虎 | 激情视频导航 | 操操操操网 | 亚洲国产精品久久久久婷婷老年 | 日韩在线观看中文字幕 | 毛片免费观看视频 | 欧美18—19sex性hd按摩 | 久久福利小视频 | 国产精品久久久久av | 久久久视频免费观看 | 久久艹一区 | 黄色香蕉视频 | 久久久视频免费观看 | 国产午夜精品久久久久久免费视 | 欧美日韩一 |