C#类自动调用其方法

Ole*_*iad 1 c# class

最近,我正在浏览一个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)");
        }
    }
Run Code Online (Sandbox Code Playgroud)

输出:

Name0: Hello; Name1: World
Name0: Hello; Name1: World
Run Code Online (Sandbox Code Playgroud)

那么,为什么inst1.ToString()和inst1在WriteLine()方法中返回相同的值?我糊涂了。

Jon*_*ase 5

传递对象时,Console.WriteLine重载将使用对象的ToString方法。

从文档中

如果value为null,则仅写入行终止符。否则,将调用value的ToString方法以生成其字符串表示形式,并将结果字符串写入标准输出流。