override方法的签名与原始基类System.Object中的签名相同,因为签名只包含方法的名称以及参数的类型和数量。
为什么有必要使用相同的返回类型来覆盖方法?
using System;
namespace Testing_Override_Keyword
{
class OverridingClass
{
public override int ToString()//**Here is error**
{
return 1;
}
}
}
这是错误
返回类型必须是字符串才能匹配被覆盖的成员
答案 0 :(得分:4)
为什么有必要使用相同的返回类型来覆盖方法?
从某种意义上说,"因为那是语言规范所说的"。从C#5规范部分10.6.4:
发生编译时错误,除非对覆盖声明满足以下所有条件:
- ...
- 覆盖方法和重写的基本方法具有相同的返回类型。
在另一种意义上,"因为否则它就没有意义了#34;关键是调用者应该能够调用虚方法 - 包括使用返回值 - 而不关心它是否被覆盖。
想象一下,如果有人写过:
object x = new OverridingClass();
string y = x.ToString();
如何处理您的覆盖?
答案 1 :(得分:0)
虚拟方法ToString()
返回string
,但在您的情况下,您返回int
,这不是相同的签名,因此您有编译错误。