對於new和override的理解

2021-04-26 17:41:19 字數 1763 閱讀 4866

在成功的道路上,你沒有耐心去等待成功的到來,那麼,你只好用一生的耐心去面對失敗。

override

和new :

在同乙個宣告中使用

new和

override

修飾符是錯誤的。

隱藏乙個繼承成員並不被認為是錯誤的,但是會造成編譯器給出警告。

為了禁止這個警告,派生類成員的宣告可以包括乙個

new修飾符來指出派生成員要隱藏基成員。

eg:(

注:此例摘自

msdn

,但此例並沒有具體說明

new和

override

的區別)

*假定公司

a 建立了乙個名為

a 的類,您的程式使用該類

:class a

public virtual void drawpoint() }*

您的公司使用此類,並且您在新增新方法時將其用來派生自己的類:

class b : a}*

您在應用程式的使用過程中沒有遇到任何問題,

直到公司

a 發布了

a 的新版本,該新版本類似如下:

class a

public virtual void drawpoint()

public virtual void drawrectangle() }*

現在,一旦使用

a 的新版本重新編譯應用程式,

您將收到來自編譯器的警告

(不會產生錯誤

)如果想用您的方法重寫新的基類方法,請使用

override

關鍵字

class b : a

}override

關鍵字可確保

b 的任何物件

都將使用

drawrectangle

的派生類版本。 *

b的物件仍可以使用

base

關鍵字訪問

drawrectangle

的基類版本。

base.drawrectangle();

*或者,也可以通過在派生類定義中使用關鍵字

new

來防止出現該警告

class b : a}*

使用new

關鍵字告訴編譯器您的定義將隱藏基類中包含的定義。

new成員的宣告只是在

new成員的範圍內隱藏繼承的成員。

下面具體說明

new

和override

的區別

using

system;

namespacen

}class

b : a }

classc

} }

結果:ab

a 類b中的方法用了new後,以 b

b = new

b();方式得到的物件b呼叫了方法f,產生的結果是b

但以abb = new

b();方式得到的物件bb掉用方法f後,產生的結果是a

using

system;

namespacen

}class

b : a }

classc

} }

結果:ab

b 類b中的方法用了override後,以 b

b = new

b();方式得到的物件b呼叫了方法f,產生的結果還是b

以abb = new

b();方式得到的物件bb掉用方法f後,產生的結果卻變成了b

c 中,new 和 override 的區別

一 在c 中,new這個關鍵字使用頻率非常高,主要有3個功能 a 作為運算子用來建立乙個物件和呼叫建構函式。b 作為修飾符。c 用於在泛型宣告中約束可能用作型別引數的引數的型別。在本文中,只具體介紹new作為修飾符的作用,在用作修飾符時,new關鍵字可以在派生類中隱藏基類的方法,也就說在使用派生類的...

C 中new和override的區別

在c 中,override和new都會覆蓋父類中的方法。那它們兩者之前有什麼區別呢?以下 的執行結果是什麼?class base public virtual void f2 class derived base public new void f2 class program 或者我們用以下的 更...

C 中new和override區別

在c 中實現重寫方法,可以用new和override兩個關鍵字來實現,究竟他們之間有什麼區別呢?下面,我以例子來說明他們之間的微妙區別 public class grandclass 基類 public virtual void method 用virtual才可以在子類中用override,而ne...