[英]Since Int32 is a value type why does it inherit .ToString()?
Int32是一个结构,因此是一个值类型。 但:
System.Object
System.ValueType
System.Int32
Int32派生自System.ValueType,它本身派生自System.Object。 Etvoilà......
是的, Int32
覆盖了ToString
......虽然这在某种程度上与此无关。 所有类型都继承了object
的成员 - 你总是可以调用ToString()
,你总是可以调用Equals
等。( ValueType
会覆盖Equals
和GetHashCode
,尽管你应该在结构中进一步覆盖它们以提供更有效的实现。)
请注意,您可以非常轻松地自行覆盖这些方法:
public struct Foo
{
public override string ToString()
{
return "some dummy text";
}
}
目前尚不清楚哪个方面让您感到困惑(这里涉及的领域不同)。 如果您能澄清一下,我们可以解决具体问题。
也许你因为没有意识到值类型继承自Object
产生混淆? 这是System.Object
, System.ValueType
, System.Int32
和MyNamespace.Customer
的继承图,它应该是您自己创建的类。 我很懒,并没有编写Int32
所有公共方法和接口。
ToString
在Object
中声明,但在ValueType
和Int32
都被覆盖。
文档是错误的。 引用和值类型都从对象继承该行为(但请记住, 并非.NET中的所有内容都是从对象派生的类 )。
所有(大多数?)核心值类型重写ToString()以返回比类名更合理的东西。
我认为你的问题的简短答案是值类型继承自System.ValueType ,而继承自object。
每个struct
都具有System.ValueType
类(不允许)的继承,该类仅由编译器完成。 所有struct
都有来自ValueType
基类的方法,它继承自Object
类,使我们可以访问ToString()
和所有其他类。
即使ValueType
继承自Object
类,但它具有覆盖的特殊实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.