作者Kelunyang (可倫)
看板C_Sharp
標題[問題] new,virtual,override的問題
時間Thu Apr 9 02:37:17 2009
是這樣的,小弟這學期修了一堂物件導向程式設計
老師上課是用Java,不過小弟想說學過C#,也就來C#用用看
後來在老師上課提到Java的所有method都是virtual的,而C#和C++必須要被指定
小弟回家之後就自己打開VS來玩玩看
結果發現就算不加virtual,在繼承的時候也沒有看出來有什麼差異
去翻了MSDN看到了new和override這兩個修飾子(小弟原本就知道有override)
然後根據MSDN的說法
http://msdn.microsoft.com/zh-tw/library/6fawty39(VS.80).aspx
好像是如果子類別沒有加上new或是override,編譯器會自己補上new
那小弟這邊概念有點搞混了,到底用new和override有什麼差異呢?
另外,MSDN說base中的方法應該要加上virtual,但是小弟自己實作時發現就算
不加上virtual一樣可以做到繼承,整個感覺就是蠻怪的囧
那就希望版上的高手幫小弟解答了@@"
--
新的Blog歡迎大家多多參觀喔~
http://kelunyang.wordpress.com
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.156.65
推 horngsh:new有點像是子類別自己新增方法, override是蓋掉父類別的 04/09 08:02
推 horngsh:方法 04/09 08:02
→ james732:Java的所有method都是virtual的,而C#和C++必須要被指定 04/09 08:33
→ james732:是這樣嗎...?? 04/09 08:33
→ Kelunyang:講義裡是說所有的Java method都是virtual,除了private 04/09 12:03
→ Kelunyang:C++和C#裡則必須明確的被virtual關鍵字指定 04/09 12:03
→ Kelunyang:但是如果是同名的方法的話(繼承不是這樣做嗎@@") 04/09 12:05
→ Kelunyang:有用new還是會改寫掉繼承來的父類別方法啊@@" 04/09 12:06
推 Cloud:所以使用New要告知編譯器,你的確是要覆寫方式~~ 04/10 09:32
→ Cloud:不然編譯器會有警告訊息~~當然不加new也是可以...XD 04/10 09:33
→ Cloud:打錯了,不是覆寫,是重新定義~~ 04/10 09:34