c中new和override的區別

時間 2021-10-14 20:16:11

1樓:匿名使用者

如果你用override,則無論呼叫的是a類還是b類中的test(),系統都會找到它實質類的test();

如果是用的new,則可以通過型別轉換呼叫到基類的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();//與上面相同

2樓:匿名使用者

new 是替代原有的,override是在原由方法的基礎上增加**.在override中可以自己決定是否通過"base."+ 系統原來的方法名 執行系統原有的方法.

new中就完全是自己的**了

你上面的例子中應該呼叫b方法中的test方法

3樓:匿名使用者

new 是新建立,override是過載已經有的,常用與過載類的事件

c#中virtual,new和override的區別

4樓:匿名使用者

一、在c#中,new這個關鍵字使用頻率非常高,主要有3個功能:

a) 作為運算子用來建立一個物件和呼叫建構函式。

b) 作為修飾符。

c) 用於在泛型宣告中約束可能用作型別引數的引數的型別。

在本文中,只具體介紹new作為修飾符的作用,在用作修飾符時,new關鍵字可以在派生類中隱藏基類的方法,也就說在使用派生類的方法是呼叫的方法是new關鍵字新定義出來的方法,而不是基類的方法。在不使用new關鍵字來隱藏基類方法也是可以的,編譯器會出現一個警告,提示如果有意去隱藏基類的方法,請使用new關鍵字修飾。

這裡有個注意事項就是new和override這兩個關鍵字是互斥的。不可以同時使用。

二、 override關鍵字主要是提供派生類對基類方法的新實現,重寫的基類方法必須和override的方法具有相同的簽名, 此關鍵字不可以用於重寫非虛方法和靜態方法,與其配套使用的關鍵字是virtual、abstract、override。與此同時,override方 法還不可以修改virtual方法的可訪問性,override方法和virtual方法必須具有相同的訪問修飾符,不能使用修飾符 new、static、virtual 或 abstract 來修改 override 方法。

以下是一個小demo,展示了new和override的本質區別:

class program

}abstract public class contact

}public class class1 : contact

}public class class2 : contact

}此demo執行結果為:

這是新的方法

這是虛方法

三、 virtual 關 鍵字允許在派生類中重寫這些物件,預設情況下,方法是非虛擬的,不可以重寫非虛方法,virtual關鍵字不可以與static、abstract、 private、override一起使用。virtual關鍵字又是和override緊密不可分的,如果要實現virtual方法就必須要使用 override或new關鍵字(new和override產生的機理不同)。

總結:new關鍵字主要用來區別派生類和基類同名方法的選擇問題,通過隱藏基類方法,達到使編譯器呼叫正確的方法的目的。override主要用來對基類的方

法和虛方法進行重寫。

c#中void與override區別是什麼

5樓:匿名使用者

void 指方法沒有返回值。

override是重寫,這是對父類

的一個定義好的方法的重寫。

例如:class newbase//定義一版個類}class anewbase : newbase}

6樓:匿名使用者

這兩個完全就不是一個道上的東西的。。

void 表示函式沒有任何返回值版,

而override則是表示重寫一個函權數的,這個多在類裡面用的比較多的。在類裡面進行函式的重寫的,然後實現另外的或者額外的功能的。。

7樓:匿名使用者

void 指方法的返回值。是無返回值的型別,

override是重寫,這是對類的操作,可以對方法的重寫。

8樓:匿名使用者

這兩個沒有可比性!實在要說的話也是overload與override的區別!這個網上太多了!面試的經典題

c#中 override和new關鍵字的區別

9樓:侯湛恩

override是過載(有的翻譯為覆蓋),new是隱藏。

override可以通過父類的引用呼叫子類的方法,new只能各自呼叫各自的方法。

例如:a a=(a)(new b());//以父類變數引用子類a.methoda(); //實際呼叫的是b.methoda();

a.methodb(); //呼叫的是a.methodb();

10樓:匿名使用者

override覆蓋虛方法,這樣的話,子類裡使用了新的方法體(父類方法/函式的功能被子類覆蓋);new的話還是使用父類的方法,比如父類有個方法abc(),子類也有一個abc,可以使用new abc()避免編譯器警告,但使用父類的abc()

c 中new返回的是什麼,C 中new的用法

不是返回啦,又不是函式,這裡是動態建立。前面的建立的是位址 指標 後者建立的是指標所指向的內容。 小豬八 返回的是指標,在這裡是引用,比如說int my 0 號後面的是具體的物件,而不是指標。而我們使用指標的時候 int qq 12 int aa qq qq aa的,故而point p new po...

c中new和delete的用法

肥仙女 在c 程式設計中,使用new分配的陣列可用delete釋放。這裡釋放的是動態分配的陣列空間,而不是靜態分配的陣列空間,詳細步驟 1 例如,我們動態建立了一個一維int陣列arr,現在需要將它釋放。2 這時只需要使用delete陣列名即可。3 注意,要釋放陣列所佔的記憶體,不能少。否則,用de...

C 中的用法,C 中new的用法

除了樓上說的 還有 引用 和 取地址 的含義int a int b a 上述兩行語句執行完之後,a b表示同一個變數,對其中一個的操作相當於對另一個的操作 int a int b a 則b中儲存的是a的地址。對 b 的任何操作相當於對a的操作。 朱古力兜 表示引用,就是物件的另一個名字,例如 int...