.ToString()方法如何工作?

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

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

正确。

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

正确。

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

是。

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

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

那么在这些情况下,调用ToString只调用ToStringSystem.Object实现,它返回完全限定名称?

正确。

你似乎已经掌握了它是如何工作的。 我唯一的修正是要注意System.Int32是一个结构 ,而不是一个

你有没有试过寻找你的问题的答案?

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

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

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

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

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

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

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

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