欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2013年03月06日 10:16:58   投稿:shangke  
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)了差異,下面分享下代碼: 

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é)果如下:

相信大家也看明白了,原來(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ú)法再訪(fǎng)問(wèn)父類(lèi)中的該方法。new是指“隱藏”,是指子類(lèi)隱藏了父類(lèi)的方法,當(dāng)然,通過(guò)一定的轉(zhuǎn)換,可以在子類(lèi)的對(duì)象中訪(fǎng)問(wèn)父類(lèi)的方法。所以說(shuō)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();
		//由于子類(lèi)覆蓋了父類(lèi)的方法,因此這里調(diào)用的是子類(lèi)的F1方法。也是OO中多態(tài)的體現(xiàn) 
		b1.F1();
		//由于在子類(lèi)中用new隱藏了父類(lèi)的方法,因此這里是調(diào)用了隱藏的父類(lèi)方法 
		b1.F2();
	}
}

相關(guān)文章

最新評(píng)論