有时当我调用一个类的.ToString()
方法时,它会返回该类的完全限定名。但是对于某些类/结构(如Int32
),它返回一个与对象相对应的字符串(整数值)。这是否意味着Int32
该类覆盖了该ToString()
方法,并且返回完全限定名称的类不会覆盖它,而只是调用 base 的 ( Object
's)ToString()
方法?实现是否Object.ToString()
只返回类的完全限定名?
4 回答
有时,当我调用该
ToString
方法时,它会返回接收调用的对象的运行时类型的完全限定名称。
正确的。
但是对于某些类型,例如
System.Int32
,ToString
返回接收者转换为字符串的值。
正确的。
结构是否
System.Int32
覆盖ToString
方法?
是的。
其
ToString
方法返回完全限定类型名称的其他类型不会覆盖ToString
吗?
大概就是这样,是的。当然,他们可以覆盖该方法并让覆盖的方法做与基类方法完全相同的事情,但这有点毫无意义。
所以在这些情况下,调用
ToString
只是调用 的System.Object
实现ToString
,它返回完全限定的名称?
正确的。
您似乎对它的工作原理有一个坚实的掌握。我唯一的更正是要注意这System.Int32
是一个结构,而不是一个类。
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 方法返回对象的完全限定类型名称。
关于 C# 中的 ToString() 方法的几点说明。
ToString() 方法是在 System.Object 基类中定义的,因此它可用于所有类型和要使用的参数。
System.object 基类提供的 ToString() 的默认实现将为您提供类型的完整名称,包括命名空间。
如果您不想要默认实现,则可以覆盖 ToString() 方法。是的 ToString() 方法是可重写的。你在哪里覆盖它?您在不希望其默认实现的类中覆盖它。
除了所有其他答案之外,重要的是要了解隐式使用的 .NET API 部分System.String.Format()
,例如 、 和 等中的and方法Write()
,WriteLine()
当然TextWriter
还有实现本身,将使用该方法在未指定显式格式时格式化对象。Console
StringBuilder.Append()
StringBuilder.AppendLine()
string.Format()
ToString()
这意味着适用于ToString()
上述的所有内容也适用于所有这些其他场景。