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...