C#类自动调用其方法

时间:2018-05-18 19:29:56

标签: 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)");
        }
    }

输出:

Name0: Hello; Name1: World
Name0: Hello; Name1: World

那么为什么inst1.ToString()和inst1在WriteLine()方法中返回相同的值?我很困惑。

2 个答案:

答案 0 :(得分:4)

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

From the documentation

  

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

答案 1 :(得分:1)

这是因为Test类会覆盖ToString函数。

当Console.Writeline必须显示非String对象时,它将查找ToString函数并在可用时使用它。