国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

C# new和override的區別分析

2020-01-18 00:08:51
字體:
來源:轉載
供稿:網友

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

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

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

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

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

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

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隱藏基類方法后,通過轉換為基類型,仍然可以調用基類的虛方法;

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

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

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

    以下是代碼:

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 额尔古纳市| 铁岭市| 左贡县| 高密市| 彩票| 留坝县| 盘山县| 娄烦县| 满城县| 北海市| 永寿县| 隆林| 临沂市| 广南县| 疏附县| 丹东市| 乌兰察布市| 连江县| 扎鲁特旗| 巨鹿县| 金坛市| 宝鸡市| 邢台县| 阿拉善左旗| 明星| 台东县| 曲阜市| 青岛市| 景东| 赤城县| 巩义市| 临江市| 宁乡县| 大连市| 泉州市| 广丰县| 新野县| 合作市| 临西县| 鄂尔多斯市| 美姑县|