C++编程人员容易犯的10个C#错误
2004-02-14 09:34 出处:中国计算机报 作者:刘彦青 责任编辑:ycx
如果被解包的对象是无效的,或是一个不同数据类型对象的索引,就会产生InvalidCastException异外。 错误5:结构与对象是有区别的 C++中的结构与类差不多,唯一的区别是,在缺省状态下,结构的访问权限是public,其继承权限也是public。一些C++编程人员将结构作为数据对象,但这只是一个约定而非是必须这样的。 在C#中,结构只是一个用户自定义的数据类型,并不能取代类。尽管结构也支持属性、方法、域和操作符,但不支持继承和destructor。 更重要的是,类是一种索引型数据类型,结构是值型数据类型。因此,结构在表达无需索引操作的对象方面更有用。结构在数组操作方面的效率更高,而在集合的操作方面则效率较低。集合需要索引,结构必须打包才适合在集合的操作中使用,类在较大规模的集合操作中的效率更高。 错误6:虚方法必须被明确地覆盖 在C#语言中,编程人员在覆盖一个虚方法时必须显性地使用override关健字。假设一个Window类是由A公司编写的,ListBox和RadioButton类是由B公司的和编程人员在购买的A公司编写的Window类的基础上编写的,B公司的编程人员对包括Window类未来的变化情况在内的设计知之甚少。 如果B公司的一位编程人员要在ListBox上添加一个Sort方法: public class ListBox : Window { public virtual void Sort() {"} } 在A公司发布新版的Window类之前,这不会有任何问题。如果A公司的编程人员也在Window类中添加了一个Sort方法。 public class Window { // " public virtual void Sort() {"} } 在C++中,Windows类中的Sort方法将成为ListBox类中Sort方法的基础方法,在希望调用Windows类中的Sort方法时,ListBox类中的Sort方法就会被调用。在C#中,虚拟函数总是被认为是虚拟调度的根。也就是说,一旦C#发现一个虚拟的方法,就不会再在虚拟链中查找其他虚拟方法。如果ListBox再次被编译,编译器就会生成一个警告信息: "\class1.cs(54,24): warning CS0114: 'ListBox.Sort()' hides inherited member 'Window.Sort()'. 要使当前的成员覆盖原来的方法,就需要添加override关健字,或者添加new关健字。 要消除警告信息,编程人员必须搞清楚他想干什么。可以在ListBox类中的Sort方法前添加new,表明它不应该覆盖Window中的虚方法: public class ListBox : Window { public new virtual void Sort() {"} 这样就可以清除警告信息。如果编程人员确实希望覆盖掉Window中的方法,就必须使用override关健字来显性地表明其意图。 |
键盘也能翻页,试试“← →”键
最热搜索
无线路由器怎么用 会说话的汤姆猫电脑版 12306网上订火车票 跳舞吧 flash player 下载 PP助手电脑版 Adobe Reader(pdf阅读) iOS6正式版12项新功能 QQ空间克隆器 9158视频KTV 植物大战僵尸辅助工具 Win8怎么关机 QQ空间进不去 2013年春节是几月几号 QQ昵称 QQ空间皮肤 PPT模板 电脑输入法不见了怎么办 2012中秋节是几月几日 word安全模式 qq输入法怎么点亮 IE修复 感恩节是几月几日 CSS布局 PS快捷键 Outlook设置 声卡驱动器官方免费下载 格式工厂怎么用 桌面图标有阴影怎么去掉 Windows RT是什么意思 2013年日历设计 Word打不开怎么办 Win8专区 腾讯微云网 windows8激活工具 剑灵什么时候公测 QQ通讯录怎么用 开心斗地主 拖拉机小游戏 麻将游戏 中国象棋 德州扑克 黄金矿工中文版 保皇扑克游戏 四国军棋 万圣节是几月几日 ps抠图教程 12306订票助手 万圣节小游戏大全 rar文件怎么打开 Photoshop CS6教程 iOS6完美越狱 QQ个性签名