我想知道为什么以下内容在 VS2010 (.NET 4) 中被标记为错误,找不到合适的方法来覆盖
:
public override string ToString(int foo=0) {
// some stuff
}
我找到了 this这看起来有点相似(至少还有可选参数的令人惊讶的行为),但我不明白为什么这个方法不覆盖 ToString()
。
现在我显然知道如何通过重载 ToString 轻松解决这个问题,所以我不对该问题的解决方案感兴趣,但对这个限制背后的基本原理感兴趣。
最佳答案
它根本没有相同的签名。覆盖方法仅限于与它们覆盖的方法严格相同的签名,可选参数不仅仅是用于重载的语法糖;它们也是方法签名的一部分,甚至是生成的 IL 代码的一部分。
这个:
public virtual string ToString();
与此不同:
public override string ToString(int foo = 0);
不管你怎么切。所以,错误。
关于c# - 默认参数和覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9985990/