.ToString()方法如何工作?

时间:2012-04-09 15:43:16

标签: c# tostring object-to-string

有时当我调用类的.ToString()方法时,它会返回类的完全限定名。但对于某些类的/ struct(如Int32),它返回一个字符串对应的对象(整数的值)。这是否意味着Int32类会覆盖ToString()方法,而返回完全限定名称的类不会覆盖它,而只是调用base(Object){{1} } 方法? ToString()实现是否只返回类的完全限定名称?

4 个答案:

答案 0 :(得分:17)

  

有时当我调用ToString方法时,它会返回接收调用的对象的运行时类型的完全限定名称。

正确。

  

但是对于某些类型,例如System.Int32ToString会返回转换为字符串的接收器的值。

正确。

  

System.Int32结构是否会覆盖ToString方法?

  

其他ToString方法返回完全限定类型名称​​而非覆盖ToString的其他类型?

情况可能就是这样,是的。当然,他们可以覆盖该方法并使覆盖方法与基类方法完全相同,但这有点无意义。

  

因此,在这些情况下,调用ToString只调用System.Object的{​​{1}}实现,它会返回完全限定的名称?

正确。

您似乎已经牢牢掌握了它的工作原理。我唯一的更正是要注意ToString结构,而不是

答案 1 :(得分:8)

您是否尝试过搜索问题的答案?

http://msdn.microsoft.com/en-us/library/system.object.tostring.aspx

  

ToString是.NET Framework中的主要格式化方法。它   将对象转换为其字符串表示形式,以使其适合   用于显示。 (有关.NET中格式化支持的信息   框架,请参阅格式化类型。)

     

ToString方法的默认实现返回完全   Object类型的限定名称,如下例所示   所示。

     

因为Object是.NET中所有引用类型的基类   在Framework中,此行为由不具有的引用类型继承   覆盖ToString方法。以下示例说明了这一点。   它定义了一个名为Object1的类,它接受默认值   所有Object成员的实现。它的ToString方法返回   对象的完全限定类型名称。

答案 2 :(得分:1)

除了所有其他答案之外,重要的是要了解 .NET API 中隐式使用 System.String.Format() 的部分,例如在中找到的 Write()WriteLine() 方法TextWriterConsoleStringBuilder.Append()StringBuilder.AppendLine() 等,当然还有 string.Format() 实现本身,将使用 ToString() 方法来格式化未指定显式格式时的对象。

这意味着适用于上述 ToString() 的所有内容也适用于所有其他场景。

答案 3 :(得分:0)

关于C#中ToString()方法的几点。

  1. ToString()方法在基本System.Object类中定义,因此可用于所有类型和参数。

  2. system.object基类提供的ToString()的默认实现将为您提供包含命名空间的类型的完整名称。

  3. 如果您不想要默认实现,则可以覆盖ToString()方法。是ToString()方法是可覆盖的。你在哪里覆盖它?您可以在不希望其默认实现的类中覆盖它。