为什么.Net中的每个类都派生自System.Object?有什么好处?
答案 0 :(得分:4)
我向你提出了相反的问题:为什么不呢?如果不是某些共同的祖先,你会如何引用“任何类型的某个对象”?有时需要。但实际上,System.Object
类确实有一些有用的方法,通常对任何类型都有用:
Equals
帮助测试平等GetHashCode
有助于提升馆藏效果GetType
- 所有对象都有某种类型Finalize
支持CLR最终确定因为这些东西对所有类型都是通用的,所以你可以拥有在多种类型上智能操作的代码(甚至在泛型之前)。
尽管如此,在C#4.0中,他们已经引入了dynamic
,这实际上是它自己的类层次结构。它完全绕过静态类型检查,并不一定来自object
。 MSDN对此有一个good article,Chris Burrows' blog series也很有趣。
答案 1 :(得分:1)
如果所有内容都来自单个类,那么您可以拥有通用的行为 - 例如“is”,“as”,ToString()和GetHashCode()。您可以在任何变量上使用这些运算符/方法。
你也可以将任何一般作为'对象'传递,这比使用void指针更好。
答案 2 :(得分:0)
没有这种行为:
另外,如果我没弄错的话,.NET的整个内存管理模型都围绕着System.Object类型。
答案 3 :(得分:0)
在托管世界中,你牺牲了指针的使用,但你有参考。所以虽然你不能有这样的东西:
SomeClass obj = new SomeClass();
void* pObj = &obj;
你可以将它作为参考类型(和拳击的价值类型,但那不是真的一样),这要归功于继承:
object pObj = obj;
当然还有其他好处,但我主要看到使用object
代替void指针。