簡體   English   中英

沒有合適的方法來覆蓋c#,盡管有一個?

[英]No suitable method found to override c# despite there being one?

我試圖在這里找到一個關於這個問題的解決方案,我也覺得我的問題非常小,但我無法弄清楚出了什么問題。 它告訴我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類沒有繼承任何東西; 它只實現了界面“形狀”。

刪除“覆蓋”關鍵字,一切都會好的。

此時C#的行為有點令人困惑,特別是對於具有C ++背景的人。 雖然在幕后,界面與抽象基類幾乎相同,但C#不會將接口實現稱為覆蓋。 這有一個優點:對於每個方法,您可以指定子類是否可以覆蓋接口實現。 如果指定virtual實現你的畫法,上課的時候square ,從矩形繼承了可以實現自己的繪制方法,如果你指定什么,方無法覆蓋平局。 如果您僅將調用轉發給類的某些(受保護)方法,則后者會很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM