日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中new和override区别

發布時間:2025/5/22 C# 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中new和override区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在C#中實現重寫方法,可以用new和override兩個關鍵字來實現,究竟他們之間有什么區別呢?下面,我以例子來說明他們之間的微妙區別:


public class GrandClass//基類
{
??????? public GrandClass()
???????
{
??????????????? Console.WriteLine("In GrandClass.Constructor");
???????
}
??????? public virtual void Method()//用virtual才可以在子類中用override,而new不需要這樣
???????
{
??????????????? Console.WriteLine("In GrandClass.Method()");
???????
}
}

public class ParentClass:GrandClass//繼承基類,看看override狀態
{
??????? public ParentClass()
??????? {
??????????????? Console.WriteLine("In ParentClass.Constructor");
??????? }
??????? public override void Method()//使用override,是說把基類的方法重新定義
??????? {
??????????????? Console.WriteLine("In ParentClass.Method() use override");
??????? }
}

public class NewParentClass:GrandClass//繼承基類,看看new狀態
{
??????? public NewParentClass()
??????? {
??????????????? Console.WriteLine("In NewParentClass.Constructor");
??????? }
??????? new public void Method()//使用new,不是說用到基類的方法,而是重新定義一個子類方法,只不過,方法名稱與基類相同
??????? {
??????????????? Console.WriteLine("In NewParentClass.Method()");
??????? }
}


  下面的調用代碼:



static void Main()
{
??????? GrandClass Parent=(GrandClass)new ParentClass();//用override子類加框一個基類對象句柄
??????? Parent.Method();
??????? GrandClass NewParent=(GrandClass)new NewParentClass();//用new子類加框一個基類對象句柄
??????? NewParent.Method();
??????? NewParentClass NewParent1=new NewParentClass();//一個子類句柄
??????? NewParent1.Method();
}


  結果是這樣的:



[1]In GrandClass.Constructor
[2]In ParentClass.Constructor
[3]In ParentClass.Method() use override
[4]In GrandClass.Constructor
[5]In NewParentClass.Constructor
[6]In GrandClass.Method()
[7]In GrandClass.Constructor
[8]In NewParentClass.Constructor
[9]In NewParentClass.Method()


  結果前的序號是我自己加的.為了以下的分析:
  [1],[2]兩句是GrandClass Parent=(GrandClass)new ParentClass();的結果.(注意一下子類構建器與基類構建器的初始化順序)
  [3]是Parent.Method();結果.
  [4],[5]兩句是GrandClass NewParent=(GrandClass)new NewParentClass();的結果.
  [6]是NewParent.Method();的結果.
  [7],[8]兩句是GrandClass NewParent1=(GrandClass)new NewParentClass();的結果.
  [9]是NewParent1.Method();的結果.

  這里我們可以看到,同樣是用子類的對象構造一個基類句柄.結果卻很明顯,可以看到[3][6]的區別.[3]調用了子類的Method(),而[6]調用了基類的Method().
  這說明,override可以覆蓋基類的方法,讓基類的方法以子類的內容實現,而new不用來覆蓋基類的方法,而是全新定義一個子類的方法,這個方法只屬于子類,與基類的方法無關,只是名字上相同而已.
而這一例子的基礎是建立在用子類對象加框成基類對象的,目的是實現用基類句柄調用子類方法,以實現重載的多形性.
  如果想調用子類的new方法,用子類的句柄(絕對不能用基類句柄)來調用.結果[9]可以看出來.
  用new是在為子類定義方法名時,實在沒有辦法定義方法名的情況才與基類的方法相同,但這個方法只在子類中起到作用,而不影響基類的方法.也就是說,new方法就是子類新定義的方法.用override是直正意義上的重載.?

轉載于:https://www.cnblogs.com/Jessy/archive/2011/09/05/2167522.html

總結

以上是生活随笔為你收集整理的C#中new和override区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。