C 编程人员容易犯的10个C#错误6
文章作者 100test 发表时间 2007:03:10 17:09:38
来源 100Test.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关健字来显性地表明其意图。