没有找到合适的方法来覆盖c#,尽管有一个
本文关键字:覆盖 有一个 方法 | 更新日期: 2023-09-27 18:26:51
我试图在这里找到这个问题的解决方案,我也觉得我的问题很小,但我不知道出了什么问题。它告诉我Rectangle.draw():没有找到合适的方法来覆盖。
public interface shape
{
void draw();
}
//concrete classes that implemenet interfaces
public class Rectangle : shape
{
public override void draw()
{
Console.WriteLine(this.GetType().Name + "'s inside function (generate stuff here) ");
}
}
错误是正确的。只有当方法存在于继承的基类中时,才能重写该方法。Rectangle类没有继承任何内容;它只实现了接口"shape"。
删除"override"关键字,一切都会好起来的。
C#的行为在这一点上有点令人困惑,尤其是对于具有C++背景的人来说。尽管在幕后,接口的工作原理与抽象基类几乎相同,但C#并不将接口实现称为重写。这有一个优点:对于每个方法,您可以指定子类是否可以覆盖接口实现。如果在实现draw方法时指定virtual
,则从矩形继承的类square
可以实现其自己的draw方法,如果不指定任何内容,则square无法覆盖draw。如果只将调用转发到类的某个(受保护的)方法,则后面的方法会有所帮助。