在成功的道路上,你沒有耐心去等待成功的到來,那麼,你只好用一生的耐心去面對失敗。
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...