看板 C_Sharp 關於我們 聯絡資訊
是這樣的,小弟這學期修了一堂物件導向程式設計 老師上課是用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