C# 从System.ValueType继承

C# 从System.ValueType继承,c#,C#,我在许多文章中读到,所有值都是从System.ValueType派生的类型。但是经过一些调查,我发现所有的值类型要么是struct要么是enum 我们知道,struct不支持继承。那么,值类型是如何从System.ValueType派生的呢 那么值类型是如何从System.value类型派生的 基本上是烟雾和镜子。它从概念上起源于ValueType,因此也起源于object,它提供了对一些常见API的访问,如ToString()和Equals,但它实际上不是一个对象(除非是“装箱的”)——这其中

我在许多文章中读到,所有值都是从
System.ValueType
派生的类型。但是经过一些调查,我发现所有的值类型要么是
struct
要么是
enum

我们知道,
struct
不支持继承。那么,值类型是如何从
System.ValueType
派生的呢

那么值类型是如何从System.value类型派生的

基本上是烟雾和镜子。它从概念上起源于
ValueType
,因此也起源于
object
,它提供了对一些常见API的访问,如
ToString()
Equals
,但它实际上不是一个对象(除非是“装箱的”)——这其中包含了很多魔力。例如,当您对值类型调用
.ToString()
时,这意味着什么取决于您是否覆盖了它-它可以是虚拟调用(如果没有,这意味着“装箱”)或静态调用(如果有);或者,如果编译器不确定(泛型、外部类型等),则执行“受限”调用(将该决定推迟到JIT)

运行时能够根据需要对值类型进行装箱(尽管这并不一定有效),而且在装箱形式中,完全可以说,装箱源于这些内容


但归根结底,这里重要的不是
struct Foo
源于
ValueType
——这只是一个实现细节,可以让事情顺利进行。重要的是,您不能选择任何其他基本类型-与通常从
对象
派生的
类栏
,但可以从其他类派生的
相比。

CLR与您的代码不遵循相同的规则。@BrianRasmussen将此作为一个答案,请参见,特别是supercat.System.ValueType的答案不是值类型。看,这是一个抽象类。C#,google“C#boxing conversion”了解更多信息时,类型系统误认为值类型值可以转换为类的对象。值类型的继承是不可能的,这一点非常重要,值类型的存在是为了生成快速代码。它们与处理器的工作方式非常匹配。必须考虑继承会破坏这些好处。