m.e*_*son 10 .net c# tostring value-type reference-type
这些是关于.ToString()这个的文档提出了这个问题.他们说:
因为Object是.NET Framework中所有引用类型的基类,所以此行为[.ToString()]由不覆盖ToString方法的引用类型继承.
然而,它进一步说明:
例如,Char,Int32和String等基类型提供ToString实现
但是Int32是一个结构,因此必须是值类型.
那么这里发生了什么?Int32是否实现了它自己的.ToString(),它与Object无关?
小智 13
Int32是一个结构,因此是一个值类型.但:
System.Object
System.ValueType
System.Int32
Run Code Online (Sandbox Code Playgroud)
Int32派生自System.ValueType,它本身派生自System.Object.Etvoilà......
Jon*_*eet 11
是的,Int32覆盖ToString......虽然这在某种程度上与此无关.所有类型都继承成员object- 你可以随时调用ToString(),你可以随时调用Equals等等(ValueType覆盖Equals和GetHashCode为你,尽管你应该在结构中进一步覆盖它们以提供更有效的实现.)
请注意,您可以非常轻松地自行覆盖这些方法:
public struct Foo
{
public override string ToString()
{
return "some dummy text";
}
}
Run Code Online (Sandbox Code Playgroud)
目前尚不清楚哪个方面让您感到困惑(这里涉及的领域不同).如果您能澄清一下,我们可以解决具体问题.
也许你因为没有意识到价值类型继承而产生混淆Object?这里的继承图System.Object,System.ValueType,System.Int32和MyNamespace.Customer这应该是一个类,你自己造成的.我很懒,并没有编写所有公共方法和接口Int32.

ToString声明Object但在内部ValueType和内部都被覆盖Int32.