繁体   English   中英

在C#中覆盖ToString()的工作

[英]Working of overrided ToString() in C#

我只是通过了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 

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

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

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

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

从MSDN: Console.WriteLine Method (Object)

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

现在无需调用此函数,只需将一个对象传递给WriteLine即可自动打印此人的详细信息

请参阅: Console.WriteLine

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM