我试图找到关于这个问题的解决方案here,我也觉得我的问题非常小,但我无法弄清楚出了什么问题。它告诉我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) ");
}
}
答案 0 :(得分:7)
错误是正确的。如果方法存在于继承的基类中,则只能覆盖该方法。你的Rectangle类没有继承任何东西;它只实现了“shape”接口。
删除“覆盖”关键字,一切都会好的。
答案 1 :(得分:1)
此时C#的行为有点令人困惑,特别是对于具有C ++背景的人。虽然在幕后,界面与抽象基类几乎相同,但C#不会将接口实现称为覆盖。这有一个优点:对于每个方法,您可以指定子类是否可以覆盖接口实现。如果在实现draw方法时指定virtual
,则从矩形继承的类square
可以实现自己的draw方法,如果不指定任何方法,则square不能覆盖draw。如果您要将调用转发给该类的某些(受保护)方法,则后者会很有用。