为什么在MessageBox.show()中显式调用ToString()方法?

本文关键字:调用 ToString 方法 MessageBox show 为什么 | 更新日期: 2023-09-27 18:06:49

我收集到 MessageBox.show() 方法接受string参数,因此我们需要 ToString() 方法调用参数。

object k = 999;
MessageBox.Show(k.ToString());

但是当涉及到 Console.WriteLine() 时,它本身就足够聪明了。我的问题是为什么有差异?

为什么在MessageBox.show()中显式调用ToString()方法?

如果你看一下http://referencesource.microsoft.com/#mscorlib/system/console.cs,8c83114cc3fd109d

,那么您将看到Console类中有许多WriteLine函数的重载,包括Console.WriteLine(Object value)。这很方便。

MessageBox.Show没有这些不同的重载,只接受字符串。

Console.WriteLine有许多重载,其中一个重载取object并调用ToString()

MessageBox.Show没有类似的重载——它必须接受一个字符串。

如果你查看参考代码或MSDN,你会看到Console.WriteLine()有一个巨大的过载列表。

int, double, decimal等版本…object参数的版本。所以如果你写

object k = 999;
Console.WriteLine(k);

使用的是Console.WriteLine(object o)重载,它内部调用k.ToString()

另一方面,

MessageBox.Show()只有将string作为文本显示参数的重载,object k不能隐式地强制转换为string。所以你必须自己调用k.ToString()