.net每个类型都继承自System.Object?这可能是一个非常基本的问题,但我对此有点困惑。如果我镜像Int32/Double/any值类型代码,我会看到它们是看起来像这样的结构:IEquatable{....}那么为什么我们说.NET中的所有内容都是从System.Object派生的。我想我在这里遗漏了一些关键点。编辑:更让我困惑的是作为结构的值类型如何继承自System.Object,这是一个类。EricLippert在博客文章中介绍了这一点:并非一切都继承自对象(这是博客条目的标题;不是这个问题的答案。不要混淆。)是的,所有结构都继承自System.ValueType和System。ValueType也继承自System.Object。enum你声明从System.Enuminheritance继承自System.ValueType继承。更新:本质上,从引用类型派生的值类型没有问题。继承是两种类型之间的“is-a”关系。但是,为了将值类型视为对象实例,必须对其进行装箱。当您将值传递给需要对象参数的方法时(或调用由System.Object实现的实例方法时),这是隐式完成的。不是每种类型,但System.Double是。来自EricLippert的帖子:所有值类型(包括枚举和可空类型)都派生自对象在C#中,struct是System.ValueType的合成糖,这意味着System.Double派生自System.ValueType。由于System.ValueType派生自System.Object,因此System.Double也是如此。你可以看到使用.NetFramework源或者使用.NetReflector:.classpublicsequentialansiserializablesealedbeforefieldinitDoubleextendsSystem.ValueTypeUpdate:在工具栏上,如果你选择C#你会看到(这是你看到的):alttexthttp://bqqqkg.bay.livefilestore.com/y1pk3EAm_SJtl4dn51HLrhdgHAXCS08-xY9nQUARCpT4WnBQyRHD4RLmIK9zZ4okJXMj7Xopg1EBuY_Od7_oWz7Pw/DoubleCSharp.jpg如果您更改ComboBox并选择IL,那么您将看到:alttexthttp://bqqqkg.bay.livefilestore.com/y1pRXk-0rDvFjj7b8EqU9-bydzpWjVGJMq8pDbiCr6aALob3j-aC9vvbeBS4vQRedHJ5Dh2CWtYRCywMJ9FGHOaaw/DoubleIL.jpg在IL中看到,Double扩展了System.ValueType就在几周前,EricLippert在博客上写了关于对象不是一切的内容。伟大的阅读。就你的问题而言,隐含地从ValueType结构而言,,又派生自Object。除此之外,EricLippert上面贴的链接就是你要看的。上面是C#学习教程:Doeseverytypein.netinheritancefromSystem.Object?Ifalltheshared内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
