C++编程人员容易犯的10个C#错误6 |
|
www.nanhushi.com 佚名 不详 |
错误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关健字来显性地表明其意图。
|
|
|
文章录入:杜斌 责任编辑:杜斌 |
|
上一篇文章: C++编程人员容易犯的10个C#错误5 下一篇文章: C++编程人员容易犯的10个C#错误7 |
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
|