在c#中有兩種方法可以重寫類的成員函式,分別是**new**和**override**,看書時書上並沒有說明兩者的區別,經過網上查資料後,總結如下:如果使用的是override,則呼叫的是它實際類的函式,而用的是new的話,呼叫的是可以被轉換為其引用類的函式
參考**點選這裡
a類 有方法 public virtual void test()
b類繼承自a類,有方法 public new void test()
如下例項化:
a a = new b();
a.test();
下面是override的情況:
a a = new a();
b b = new b();
a a1=new b();
a.test();//呼叫a中test();
b.test();//呼叫b中test();
a1.test();//呼叫b中test();系統會自動識別a1是b的例項
((a)b).test();//與上面相同
下面是new的情況:
a a = new a();
b b = new b();
a a1=new b();
a.test();//呼叫a中test();
b.test();//呼叫b中test();
a1.test();//呼叫a中test();
((a)b).test();//與上面相同
深究其原因,為何兩者不同,是因為原理不同。
override是覆蓋,即將基類的方法直接抹去重新寫,而new只是將基類方法隱藏起來,故而仍舊可以呼叫基類方法,當然也可用base直接訪問,但事實上即便用override的話,也能在用base直接訪問基類的方法,因為抹去,只是在派生類裡面抹去了,並沒有改變其對基類方法的訪問許可權。
c 中的new 類建構函式 new
我們都知道在例項化乙個類時會使用這個類的 init 方法,但是在真實情況中類的例項化是分成兩個階段的,第一階段是使用該類的 new 方法例項化乙個物件,第二階段才是使用物件的 init 方法進行初始化。由於很多時候,第乙個階段被我們忽略了,所以看起來例項化類時只使用了 init 方法。既然在例項化類...
C 中類的隱藏和重寫的區別
c 的類有隱藏和重寫,兩個的作用其實都是為了實現子類的更改 我是這樣認為了 但之間又有區別,隱藏的方法,只能在子類中實現,而重寫的方法是可以在父類中得以實現.可能這樣說有點玄,舉個例子就可很容易說明 類檔案中如下定義 view plaincopy to clipboardprint?public c...
關於C 中類方法的重寫和覆蓋
在c 中改變類中相同名稱的方法的實現過程中有三種方式 過載,重寫和覆蓋。首先過載是指具有相同的方法名,通過改變引數的個數或者引數型別實現同名方法的不同實現。重寫則是只在繼承中,子類通過override關鍵字修飾方法,實現父類和子類相同方法的不同實現,注意,父類方法必須是用virtual或者abstr...