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

时间:2014-10-16 04:39:40

标签: c# interface override

我试图找到关于这个问题的解决方案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) ");
        }
    }

2 个答案:

答案 0 :(得分:7)

错误是正确的。如果方法存在于继承的基类中,则只能覆盖该方法。你的Rectangle类没有继承任何东西;它只实现了“shape”接口。

删除“覆盖”关键字,一切都会好的。

答案 1 :(得分:1)

此时C#的行为有点令人困惑,特别是对于具有C ++背景的人。虽然在幕后,界面与抽象基类几乎相同,但C#不会将接口实现称为覆盖。这有一个优点:对于每个方法,您可以指定子类是否可以覆盖接口实现。如果在实现draw方法时指定virtual,则从矩形继承的类square可以实现自己的draw方法,如果不指定任何方法,则square不能覆盖draw。如果您要将调用转发给该类的某些(受保护)方法,则后者会很有用。