5

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

4

4 回答 4

19

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

正确的。

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

正确的。

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

是的。

ToString方法返回完全限定类型名称的其他类型不会覆盖ToString吗?

大概就是这样,是的。当然,他们可以覆盖该方法并让覆盖的方法做与基类方法完全相同的事情,但这有点毫无意义。

所以在这些情况下,调用ToString只是调用 的System.Object实现ToString,它返回完全限定的名称?

正确的。

您似乎对它的工作原理有一个坚实的掌握。我唯一的更正是要注意这System.Int32是一个结构,而不是一个

于 2012-04-09T15:47:25.187 回答
7

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

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

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

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

于 2012-04-09T15:45:39.193 回答
1

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

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

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

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

于 2017-04-11T06:29:17.720 回答
1

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

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

于 2021-03-06T01:29:27.037 回答