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

时间:2016-09-12 11:40:00

标签: c#

我认为 MessageBox.show() 方法接受字符串参数,因此我们需要 ToString() 方法来调用参数。

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

但是当谈到 Console.WriteLine() 时,它本身就足够聪明。我的问题是为什么会有区别?

3 个答案:

答案 0 :(得分:2)

如果您查看http://referencesource.microsoft.com/#mscorlib/system/console.cs,8c83114cc3fd109d

然后您会发现WriteLine类中的Console函数有很多重载,包括Console.WriteLine(Object value)。这很方便。

MessageBox.Show缺少这些不同的重载并接受"仅#34;一个字符串。

答案 1 :(得分:0)

Console.WriteLine有很多重载,one of which takes an object并在其上调用ToString()

MessageBox.Show没有类似的重载 - 它必须带一个字符串。

答案 2 :(得分:0)

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

intdoubledecimal等版本以及object参数的版本。所以,如果你写

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

使用了重载Console.WriteLine(object o),内部自身调用k.ToString()

另一方面,

MessageBox.Show()只有重载,需要string作为要显示的文本的参数,并且object k无法隐式投放到{{1 }}。你必须自己打电话给string