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关健字来显性地表明其意图。


相关文章


C 编程人员容易犯的10个C#错误7
C 编程人员容易犯的10个C#错误9
C 编程人员容易犯的10个C#错误6
计算机等级考试二级C语言上机题21
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛