C# 在C中使用重写的ToString()

C# 在C中使用重写的ToString(),c#,asp.net,oop,overriding,C#,Asp.net,Oop,Overriding,我刚刚浏览了官方msdn文档中的以下代码。这段代码看起来很简单,但有一件事我无法理解,当我们为Person创建对象时,在tostring overrided方法中,我们给出了一些值,现在不调用此函数,只将一个对象传递给WriteLine,它会自动打印Person的详细信息,这是如何发生的,请有人解释一下 using System; class Person { private string myName ="N/A"; // Declare a Name property of

我刚刚浏览了官方msdn文档中的以下代码。这段代码看起来很简单,但有一件事我无法理解,当我们为Person创建对象时,在tostring overrided方法中,我们给出了一些值,现在不调用此函数,只将一个对象传递给WriteLine,它会自动打印Person的详细信息,这是如何发生的,请有人解释一下

using System;
class Person
{
    private string myName ="N/A";

    // Declare a Name property of type string:
    public string Name
    {
        get 
        {
           return myName; 
        }
        set 
        {
           myName = value; 
        }
    }
    public override string ToString()
    {
        return "Name = " + Name ;
    }

    public static void Main()
    {
        Person person = new Person();
        Console.WriteLine("Person details - {0}", person);
        person.Name = "Joe";
        Console.WriteLine("Person details - {0}", person);


    }
}
输出


当您将对象(任何对象)传递到Console.WriteLine时,将调用ToString。大多数控件在传递对象时也是这样工作的

基本上,UI不知道如何显示类,因此.NET提供了.ToString方法,以便可以显示某些内容。如果您不重写它,请注意,默认值将为您提供完全限定名和一些其他垃圾。覆盖功能可使函数变得有用。

来自MSDN:

写入指定对象的文本表示形式,后跟 标准输出流的当前行终止符

现在,不调用此函数,只将一个对象传递给 WriteLine并自动打印出此人的详细信息 它正在发生

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


WriteLine方法在内部调用传递给它的任何对象上的ToString


在您的示例中,第一行打印默认n/a,因为您尚未为对象指定名称。第二行在将名称设置为Joe后运行,这将在内部覆盖默认的n/a。因此,在同一对象上再次调用ToString将返回name的新值。

您可以自己检查它。深入研究.NET源代码从来都不是一件容易的事。在回答了所有这些问题之后,这确实是可以理解的:
Person details - Name = N/A 
Person details - Name = Joe