在 c# 中,Struct 不能继承一个类,那么为什么它隐式继承 System.Object,而 System.Obje

本文关键字:继承 System 为什么 Object Obje 一个 不能 Struct | 更新日期: 2023-09-27 18:12:00

在c#中,Struct不能继承一个类,那么为什么它隐式继承System.Object,而System.Object是一个类。

我知道System.Object是每种类型的基本类型。但是既然根据定义,结构体不能继承一个类,那么为什么System.Object是继承的呢?

在 c# 中,Struct 不能继承一个类,那么为什么它隐式继承 System.Object,而 System.Obje

但是根据定义,结构体不能继承一个类

这是一个错误的前提。 自定义结构必须直接从 System.ValueType 继承,而 本身继承自 System.Object这就是要求。 它不能从任何其他类型继承。 因此,用户定义的结构不仅可以从类继承,实际上还必须从[特定]类继承。

(注意枚举必须继承自Enum,而不是Object,尽管Enum继承自ValueType,而继承自Object

在 c# 中,结构不能继承类

是的,它们不能从Custom class继承,尤其是作为Value type,因为它们只能允许Value types操作,例如:

  • 对简单数据结构(如 Stack(的分配,与引用类型的Heap不同
  • 在变量副本期间,作为Value Type,进行新的分配,例如对于原始类型,如IntegerFloat,所以Struct s1 = s2,创建一个全新的副本,但对于引用类型,它是引用的副本,这意味着指向相同内存的指针

要点,那么为什么要允许从System.Object类中衍生出来,多个重要原因:

  • 创建了CTS(通用/统一类型系统(,其中最终类型收敛到基类System.Object,因此可以以统一的方式表示
  • Value typesReference types相比,它们在操作和功能上仍然是原始的,并且它们所能表示的内容有限,这就是为什么基类型是引用类型的原因,因此在需要时,可以通过装箱完成转换,在堆上进行分配并使用引用类型的功能
  • 允许System.Object在所有类型、值和引用(如ReferenceEquals, GetHashCode, MemberwiseClone,ToString,GetType(上公开某些基本的通用函数,尽管肯定会在覆盖后
相关文章: