一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - C# new和override的區別分析

C# new和override的區別分析

2019-10-27 11:21C#教程網 ASP.NET教程

C# new和override都會覆蓋父類中的方法。那它們兩者之前有什么區別呢?

昨天面試問到了new的幾種用法以及與Override的區別,有點模糊

回來google下,new的用法有以下3中

1、運算符:初始化對象和調用構造函數

2、修飾符:隱藏基類方法

3、于在泛型聲明中約束可能用作類型參數的參數的類型

至于作為修飾符和override的區別,看了下文章不太明白,寫了個例子,運行結果,發現了差異,下面分享下代碼:

  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.   } 

運行結果如下:

C# new和override的區別分析

相信大家也看明白了,原來是這樣

new隱藏基類方法后,通過轉換為基類型,仍然可以調用基類的虛方法;

而override則完全將基類的方法進行了重寫,即使將子類型轉換為基類型,調用的仍然是重寫后的方法。。。

所以new 是隱藏基類方法,而Override是重寫基類方法咯

override是指“覆蓋”,是指子類覆蓋了父類的方法。子類的對象無法再訪問父類中的該方法。new是指“隱藏”,是指子類隱藏了父類的方法,當然,通過一定的轉換,可以在子類的對象中訪問父類的方法。所以說C# new和override的區別是覆蓋和隱藏

以下是代碼:

  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.         //由于子類覆蓋了父類的方法,因此這里調用的是子類的F1方法。也是OO中多態的體現  
  24.         b1.F1(); 
  25.         //由于在子類中用new隱藏了父類的方法,因此這里是調用了隱藏的父類方法  
  26.         b1.F2(); 
  27.     } 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: freee×xx性欧美| 国产自拍视频一区 | 午夜无码国产理论在线 | 国内精品久久久久影院嫩草 | brazzersvideo欧美最新 | 91丝袜足控免费网站xx | 麻生希在线观看 | 肉大捧一进一出视频免费播放 | 男女xxoo做爰猛烈动态一 | 天天亚洲综合 | 亚洲 另类 欧美 变态屎尿 | 毛片啪啪视频 | 极品丝袜小说全集 | 女黑人尺寸bbb | 小sao货水好多真紧h的视频 | 欧美一区二区三区精品国产 | 精品视频免费在线观看 | 闺蜜调教我做她的脚奴 | 免费看男女污污完整版 | 久久精品热在线观看30 | 国产欧美日韩精品在线 | 韩国一区二区三区 | yy6080午夜国产免费福利 | 国产色图片 | 日本在线不卡免 | chinese壮直男gay老年人 | 女医学护士一级毛片 | 3p文两男一女办公室高h | 538精品视频在线观看 | 精新精新国产自在现拍 | 青柠在线完整高清观看免费 | 无码毛片内射白浆视频 | 性欧美xxxxx高清 | 四虎欧美| 闺蜜的样子小说安沁在线阅读 | 精品国产免费第一区二区三区日韩 | haodiaocao几万部精彩视频 | 亚洲琪琪 | 国产91 最新 在线 | 欧美激情精品久久久久久不卡 | 国产精品嫩草影院在线看 |