c# - 默认参数和覆盖

标签 c# .net

我想知道为什么以下内容在 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/

相关文章:

c# - 通过 TCP 的 HTTP 请求丢弃数据?

.net - .Net框架中是否有任何使用spinlock或spinwait的示例?

.net - Oracle pl/sql中的多线程概念

c# - 在.net世界中将JSON转换为BSON的最简单方法是什么

c# - 从方法内部获取方法的参数名称和值

c# - MVVM 中的异步是什么?模型或 View 模型。最佳实践?

c# - Linux : Any particular way thats better than others when seeding data with EF Core? 上的 Dotnet 核心 1.1

c# - 如何终止 Windows Phone 8.1 应用程序

c# - 如何在 C# 中动态创建 DataGridView?

C# 保存大图像