[問題] new,virtual,override的問題

看板C_Sharp作者 (可倫)時間15年前 (2009/04/09 02:37), 編輯推噓3(308)
留言11則, 4人參與, 最新討論串1/3 (看更多)
是這樣的,小弟這學期修了一堂物件導向程式設計 老師上課是用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

04/09 08:02, , 1F
new有點像是子類別自己新增方法, override是蓋掉父類別的
04/09 08:02, 1F

04/09 08:02, , 2F
方法
04/09 08:02, 2F

04/09 08:33, , 3F
Java的所有method都是virtual的,而C#和C++必須要被指定
04/09 08:33, 3F

04/09 08:33, , 4F
是這樣嗎...??
04/09 08:33, 4F

04/09 12:03, , 5F
講義裡是說所有的Java method都是virtual,除了private
04/09 12:03, 5F

04/09 12:03, , 6F
C++和C#裡則必須明確的被virtual關鍵字指定
04/09 12:03, 6F

04/09 12:05, , 7F
但是如果是同名的方法的話(繼承不是這樣做嗎@@")
04/09 12:05, 7F

04/09 12:06, , 8F
有用new還是會改寫掉繼承來的父類別方法啊@@"
04/09 12:06, 8F

04/10 09:32, , 9F
所以使用New要告知編譯器,你的確是要覆寫方式~~
04/10 09:32, 9F

04/10 09:33, , 10F
不然編譯器會有警告訊息~~當然不加new也是可以...XD
04/10 09:33, 10F

04/10 09:34, , 11F
打錯了,不是覆寫,是重新定義~~
04/10 09:34, 11F
文章代碼(AID): #19tExVzx (C_Sharp)
文章代碼(AID): #19tExVzx (C_Sharp)