最近我浏览了一个C#程序,偶然发现了一个类内部的奇怪行为。我写了一个小程序来概述这种行为:
class Program
{
static void Main()
{
Test inst1 = new Test();
inst1.name0 = "Hello";
inst1.name1 = "World";
Console.WriteLine(inst1.ToString());
Console.WriteLine(inst1);
}
}
class Test
{
public string name0;
public string name1;
public override string ToString()
{
return string.Format("Name0: {0}; Name1: {1}", name0 ?? "(null)", name1 ?? "(null)");
}
}
输出:
Name0: Hello; Name1: World
Name0: Hello; Name1: World
那么为什么inst1.ToString()和inst1在WriteLine()方法中返回相同的值?我很困惑。
答案 0 :(得分:4)
传递对象时,Console.WriteLine
重载将调用对象的ToString
方法。
如果value为null,则只写入行终止符。否则,调用ToString方法的值以生成其字符串表示形式,并将结果字符串写入标准输出流。
答案 1 :(得分:1)
这是因为Test类会覆盖ToString函数。
当Console.Writeline必须显示非String对象时,它将查找ToString函数并在可用时使用它。