作者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
1F:推 horngsh:new有点像是子类别自己新增方法, override是盖掉父类别的 04/09 08:02
2F:推 horngsh:方法 04/09 08:02
3F:→ james732:Java的所有method都是virtual的,而C#和C++必须要被指定 04/09 08:33
4F:→ james732:是这样吗...?? 04/09 08:33
5F:→ Kelunyang:讲义里是说所有的Java method都是virtual,除了private 04/09 12:03
6F:→ Kelunyang:C++和C#里则必须明确的被virtual关键字指定 04/09 12:03
7F:→ Kelunyang:但是如果是同名的方法的话(继承不是这样做吗@@") 04/09 12:05
8F:→ Kelunyang:有用new还是会改写掉继承来的父类别方法啊@@" 04/09 12:06
9F:推 Cloud:所以使用New要告知编译器,你的确是要覆写方式~~ 04/10 09:32
10F:→ Cloud:不然编译器会有警告讯息~~当然不加new也是可以...XD 04/10 09:33
11F:→ Cloud:打错了,不是覆写,是重新定义~~ 04/10 09:34