在c#中,结构可以';如果System.Object是类,那么为什么它隐式继承System.Object
在c#中,Struct不能继承类,那么为什么它隐式继承System.Object,其中System.Object是类 我知道系统。对象是每种类型的基本类型。但根据定义,Struct不能继承类,那么为什么System.Object是inherit呢 但根据定义,Struct不能继承类 这是一个错误的前提。自定义结构必须直接从在c#中,结构可以';如果System.Object是类,那么为什么它隐式继承System.Object,c#,C#,在c#中,Struct不能继承类,那么为什么它隐式继承System.Object,其中System.Object是类 我知道系统。对象是每种类型的基本类型。但根据定义,Struct不能继承类,那么为什么System.Object是inherit呢 但根据定义,Struct不能继承类 这是一个错误的前提。自定义结构必须直接从System.ValueType继承,该结构本身从System.Object继承。这就是要求。它不能从任何其他类型继承。因此,用户定义的结构不仅可以从类继承,实际上还必须从[特
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
自定义类
继承,尤其是作为值类型
,因为它们只能对值类型
执行以下操作:
- 在像
这样的简单数据结构上进行分配,这与引用类型的堆栈
不同堆
- 在变量复制期间,作为
,会进行新的分配,就像原始类型一样,如值类型
,整数
,因此浮点
,会创建一个全新的副本,但对于引用类型,它是引用的副本,这意味着指向相同内存的指针结构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节最后一句第一段:“结构类型不支持用户指定的继承,所有结构类型都隐式继承自类型对象。”因此结构实际上继承自对象。这是明确的。(那