在c#中,结构可以';如果System.Object是类,那么为什么它隐式继承System.Object

在c#中,结构可以';如果System.Object是类,那么为什么它隐式继承System.Object,c#,C#,在c#中,Struct不能继承类,那么为什么它隐式继承System.Object,其中System.Object是类 我知道系统。对象是每种类型的基本类型。但根据定义,Struct不能继承类,那么为什么System.Object是inherit呢 但根据定义,Struct不能继承类 这是一个错误的前提。自定义结构必须直接从System.ValueType继承,该结构本身从System.Object继承。这就是要求。它不能从任何其他类型继承。因此,用户定义的结构不仅可以从类继承,实际上还必须从[特

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

我知道系统。对象是每种类型的基本类型。但根据定义,Struct不能继承类,那么为什么System.Object是inherit呢

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

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

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

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

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

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

在c#中,Struct不能继承类

是的,它们不能从
自定义类
继承,尤其是作为
值类型
,因为它们只能对
值类型
执行以下操作:

  • 在像
    堆栈
    这样的简单数据结构上进行分配,这与引用类型的
    不同
  • 在变量复制期间,作为
    值类型
    ,会进行新的分配,就像原始类型一样,如
    整数
    浮点
    ,因此
    结构s1=s2
    ,会创建一个全新的副本,但对于引用类型,它是引用的副本,这意味着指向相同内存的指针
要点,那么为什么允许从
System.Object
类派生,有多个重要原因:

  • 创建CTS(公共/统一类型系统),其中类型最终聚合到基类
    System.Object
    ,因此可以以统一的方式表示
  • 与引用类型相比,
    值类型
    在操作和功能上仍然是原始的,并且它们所能表示的内容有限,这就是为什么基类型是引用类型,因此在需要时,可以通过装箱、在堆上进行分配和使用引用类型的功能来完成转换
  • 允许
    System.Object
    在所有类型、值和引用(如
    ReferenceEquals、GetHashCode、MemberwiseClone、ToString、GetType
    )上公开某些基本的公共函数,但一定要进行后期重写
在c#中,Struct不能继承类

是的,它们不能从
自定义类
继承,尤其是作为
值类型
,因为它们只能对
值类型
执行以下操作:

  • 在像
    堆栈
    这样的简单数据结构上进行分配,这与引用类型的
    不同
  • 在变量复制期间,作为
    值类型
    ,会进行新的分配,就像原始类型一样,如
    整数
    浮点
    ,因此
    结构s1=s2
    ,会创建一个全新的副本,但对于引用类型,它是引用的副本,这意味着指向相同内存的指针
要点,那么为什么允许从
System.Object
类派生,有多个重要原因:

  • 创建CTS(公共/统一类型系统),其中类型最终聚合到基类
    System.Object
    ,因此可以以统一的方式表示
  • 与引用类型相比,
    值类型
    在操作和功能上仍然是原始的,并且它们所能表示的内容有限,这就是为什么基类型是引用类型,因此在需要时,可以通过装箱、在堆上进行分配和使用引用类型的功能来完成转换
  • 允许
    System.Object
    在所有类型、值和引用(如
    ReferenceEquals、GetHashCode、MemberwiseClone、ToString、GetType
    )上公开某些基本的公共函数,但一定要进行后期重写

System.Object
.NET
中的每个
类型
都应该遵循的契约,不是更有意义吗<代码>结构指示编译器
类型
值类型
指示编译器它是
引用类型
AIK结构没有继承任何内容。它们是值类型,当分配给对象变量时,它们将被装箱。所以这个“继承”看起来就像是由内部魔法完成的:@SirRufo你的意思是什么?请注意,该答案明确指出,结构继承自
对象
。这与你的断言相矛盾。@SirRufo“
A
源于
System.ValueType
,后者又源于
System.Object
“你也可以在声明相同内容的地方提取C规范。@SirRufo因为你显然关心规范的具体措辞,第1.7节最后一句第一段:“结构类型不支持用户指定的继承,所有结构类型都隐式继承自类型对象。”因此结构实际上继承自
对象。这是明确的。(那