在C#中重写ToString()的工作

时间:2014-03-06 19:00:43

标签: c# asp.net oop override

我刚刚通过官方msdn文档中的代码。这看起来非常简单,但有一点我无法理解,当我们为Person创建对象时,在tostring overrided method中我们给出了一些值,现在没有调用这个函数只是一个对象被传递给WriteLine并且它会自动打印出来这个人的详细情况怎么回事,有人请解释一下..

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);


    }
}

输出

Person details - Name = N/A 
Person details - Name = Joe 

4 个答案:

答案 0 :(得分:5)

当您传递一个对象时,将调用任何对象到Console.WriteLine .ToString()。传递对象时,大多数控件也以这种方式工作。

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

来自MSDN:Console.WriteLine Method (Object)

  

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

答案 3 :(得分:2)

  

现在没有调用这个函数只是传递一个对象   WriteLine它会自动打印人的详细信息   它正在发生

See: Console.WriteLine

  

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