没有找到合适的方法来覆盖c#尽管有一个?

没有找到合适的方法来覆盖c#尽管有一个?,c#,interface,overriding,C#,Interface,Overriding,我试图找到一个解决这个问题的办法,我也觉得我的问题很小,但我不知道出了什么问题。它告诉我Rectangle.draw():找不到合适的方法进行重写 public interface shape { void draw(); } //concrete classes that implemenet interfaces public class Rectangle : shape { public overrid

我试图找到一个解决这个问题的办法,我也觉得我的问题很小,但我不知道出了什么问题。它告诉我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) ");
        }
    }

错误是正确的。仅当方法存在于继承的基类中时,才能重写该方法。矩形类不继承任何内容;它只实现接口“shape”

移除“重写”关键字,一切都会好的。

< P> C的行为在这一点上有点混乱,尤其是对于C++背景的人。尽管在幕后,接口的工作原理与抽象基类几乎相同,但C#并不将接口实现称为覆盖。这有一个优点:对于每个方法,可以指定子类是否可以重写接口实现。如果在实现绘制方法时指定了
virtual
,则从矩形继承的类
square
可以实现其自己的绘制方法,如果未指定任何内容,square无法覆盖绘制。如果只将调用转发给类的某个(受保护的)方法,则后者很有用