濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫(kù) > C# new和override的區(qū)別分析

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

熱門標(biāo)簽:申請(qǐng)400電話手續(xù) 合肥電銷外呼系統(tǒng)哪家公司做的好 蘋果手機(jī)凱立德地圖標(biāo)注 玉林市機(jī)器人外呼系統(tǒng)哪家好 電話機(jī)器人軟件銷售工作 南陽外呼系統(tǒng)定制化 預(yù)測(cè)式外呼系統(tǒng)使用說明 百度ai地圖標(biāo)注 同安公安400電話怎么申請(qǐng)流程

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

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

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

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

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

至于作為修飾符和override的區(qū)別,看了下文章不太明白,寫了個(gè)例子,運(yùn)行結(jié)果,發(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();
    }
  }
}

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

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

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

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

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

override是指“覆蓋”,是指子類覆蓋了父類的方法。子類的對(duì)象無法再訪問父類中的該方法。new是指“隱藏”,是指子類隱藏了父類的方法,當(dāng)然,通過一定的轉(zhuǎn)換,可以在子類的對(duì)象中訪問父類的方法。所以說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();
	}
}

您可能感興趣的文章:
  • c#中的interface abstract與virtual介紹
  • 深入理解C# abstract和virtual關(guān)鍵字
  • C#中abstract的用法詳解
  • 深入解析C#中的abstract抽象類
  • 深入理解C#中new、override、virtual關(guān)鍵字的區(qū)別
  • C#中Override關(guān)鍵字和New關(guān)鍵字的用法詳解
  • C#中Abstract 、Virtual和Override的使用及區(qū)別

標(biāo)簽:臺(tái)州 揚(yáng)州 南昌 南京 南京 海南 淄博 嘉興

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《C# new和override的區(qū)別分析》,本文關(guān)鍵詞  new,和,override,的,區(qū)別,分析,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《C# new和override的區(qū)別分析》相關(guān)的同類信息!
  • 本頁收集關(guān)于C# new和override的區(qū)別分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    忻城县| 岐山县| 崇明县| 前郭尔| 东台市| 合阳县| 义马市| 盘锦市| 航空| 博湖县| 亳州市| 张掖市| 轮台县| 巴南区| 都匀市| 丰宁| 绥芬河市| 伊金霍洛旗| 历史| 新泰市| 吴堡县| 娄底市| 卫辉市| 吉木乃县| 铜山县| 嘉黎县| 阿克陶县| 遂溪县| 眉山市| 美姑县| 揭阳市| 正宁县| 通化市| 长宁区| SHOW| 沭阳县| 利川市| 寻乌县| 文成县| 滕州市| 五莲县|