c# - .net 中的每种类型都继承自 System.Object 吗?

标签 c# .net

<分区>

这可能是一个非常基本的问题,但我对此有点困惑。 如果我反射(reflect) Int32/Double/任何值类型代码,我看到它们是结构并且看起来像:

[Serializable, StructLayout(LayoutKind.Sequential), ComVisible(true)]
public struct Double : IComparable, IFormattable, IConvertible, IComparable<double>, IEquatable<double>
{
....
}

那么,为什么我们说 .NET 中的所有内容都是从 System.Object 派生的。我认为这里遗漏了一些关键点。

编辑: 更让我困惑的是,结构值类型如何继承自类 System.Object。

最佳答案

Eric Lippert 在博客文章中对此进行了介绍:Not everything derives from object (这是博客条目的标题;不是这个问题的答案。不要混淆。)

是的,所有 struct 都继承自 System.ValueType,后者又继承自 System.Object。您声明的 enum 继承自 System.Enum,而 System.Enum 继承自 System.ValueType

更新:

本质上,从引用类型派生的值类型没有问题。继承是两种类型 之间的“is-a”关系。但是,为了将值类型视为对象实例,必须对其进行装箱。当您将值传递给需要对象参数的方法时(或者当您调用在 System.Object 中实现的实例方法时),这是隐式完成的。

关于c# - .net 中的每种类型都继承自 System.Object 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1316626/

相关文章:

.net - edge.js:如何使用对 COM 对象的引用从 .NET 程序集中调用方法?

c# - 如何使用 XmlWriter 将 System.Xml.Linq.XElement 写入流

c# - 异步等待执行顺序 - 代码仅在单步调试/调试时才真正起作用

c# - 可扩展性位置距离搜索全美国超过 100,000 个 LatLng 位置

c# - 带有哈希表/字典参数的 Powershell C# Cmdlet

c# - 在 rtf 字符串的位置追加文本

c# - 是否有不使用连续内存的开源 MemoryStream 实现?

c# - 如何在 C# 中不使用 Edmx 的情况下使用 DbContext?

c# - GroupBy 匿名类型不起作用。在 C# 它的工作

c# - 如何在隐藏时调用对象方法