【问题标题】:Working of overrided ToString() in C#在 C# 中覆盖 ToString() 的工作
【发布时间】:2014-03-06 19:00:43
【问题描述】:

我刚刚浏览了官方 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 

【问题讨论】:

  • 有一个awesome way 可以自己查看。深入研究 .NET 源代码从未如此简单。
  • 在所有答案之后这真的可以理解:)

标签: c# asp.net oop overriding


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      来自 MSDN:Console.WriteLine Method (Object)

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

      【讨论】:

        【解决方案4】:

        现在不调用这个函数只是一个对象被传递给 WriteLine 它会自动打印人员的详细信息 它发生了

        See: Console.WriteLine

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-07
          • 1970-01-01
          • 2015-02-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多