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