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关健字来显性地表明其意图。
键盘也能翻页,试试“← →”键
相关文章

相关软件:

腾讯QQ2012
大小:52.93 MB 授权:免费
腾讯QQ2012
立即下载
腾讯QQ2013
大小:49.32 MB 授权:免费
腾讯QQ2013
立即下载