[英]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.