没有找到合适的方法来覆盖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) ");
        }
    }

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

错误是正确的。只有当方法存在于继承的基类中时,才能重写该方法。Rectangle类没有继承任何内容;它只实现了接口"shape"。

删除"override"关键字,一切都会好起来的。

C#的行为在这一点上有点令人困惑,尤其是对于具有C++背景的人来说。尽管在幕后,接口的工作原理与抽象基类几乎相同,但C#并不将接口实现称为重写。这有一个优点:对于每个方法,您可以指定子类是否可以覆盖接口实现。如果在实现draw方法时指定virtual,则从矩形继承的类square可以实现其自己的draw方法,如果不指定任何内容,则square无法覆盖draw。如果只将调用转发到类的某个(受保护的)方法,则后面的方法会有所帮助。