簡體   English   中英

覆蓋虛擬方法

[英]Overriding virtual method

覆蓋方法的簽名與原始基類System.Object中的簽名相同,因為簽名僅包括方法的名稱以及所采用的參數的類型和數量。

為什么必須具有相同的返回類型來覆蓋方法?

using System;

namespace Testing_Override_Keyword
{
    class OverridingClass
    {

        public override int ToString()//**Here is error**
        {
            return 1;
        }
    }
}

這是錯誤

返回類型必須是字符串以匹配重寫的成員

為什么必須具有相同的返回類型來覆蓋方法?

從某種意義上說,“因為這就是語言規范所說的話”。 根據C#5規范的第10.6.4節:

除非出現以下所有對覆蓋聲明都為真的情況,否則會發生編譯時錯誤:

  • ...
  • 覆蓋方法和覆蓋的基本方法具有相同的返回類型。

從另一種意義上說,“因為否則它就沒有意義”。 關鍵是調用者應該能夠調用虛擬方法(包括使用返回值),而不必關心它是否被覆蓋。

假設有人寫過:

object x = new OverridingClass();
string y = x.ToString();

如何處理您的替代?

虛擬方法ToString()返回string ,但是在您的情況下,您返回的是int ,這不是相同的簽名,因此會出現編譯錯誤。

暫無
暫無

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

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