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

时间:2016-10-07 16:50:39

标签: c#

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

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

2 个答案:

答案 0 :(得分:4)

  

但是根据定义,Struct不能继承一个类

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

(请注意,枚举必须继承自Object,而不是Enum,但ValueType继承自Object的继承自.wrapper { width: 740px; background: #ccc; } .leftSidebar { float: left; width: 200px; } .mainContent { padding-right: 200px; padding-left: 200px; }。)

答案 1 :(得分:1)

  

在c#中,Struct不能继承类

是的,他们无法继承Custom class,尤其是Value type,因为他们只能对Value types进行操作,如:

  • Stack这样的简单数据结构上进行分配,与参考类型的Heap不同
  • 在变量副本期间,作为Value Type,会进行新的分配,例如基本类型,例如IntegerFloat,因此Struct s1 = s2创建一个全新的副本,但对于引用类型,它是Reference的副本,表示指向同一内存的指针
  

要点,那么为什么允许从System.Object类派生,有多个重要原因:

  • 创建CTS(通用/统一类型系统),最终类型收敛到基类System.Object,因此可以统一的方式表示
  • Value types相比,
  • Reference types在操作和功能方面仍然是原始的,并且它们可以代表什么的限制,这就是基本类型是引用类型的原因,因此在需要时,转换可以通过装箱完成,在堆上进行分配并使用引用类型的功能
  • 允许System.Object对所有类型,值和引用(例如ReferenceEquals, GetHashCode, MemberwiseClone,ToString,GetType)公开的某些基本公共函数,但肯定会重写