从System.ValueType继承

时间:2019-02-06 09:46:18

标签: c#

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

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

1 个答案:

答案 0 :(得分:5)

  

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

基本上是烟雾和镜子。从概念上说,它是从ValueType派生而来,因此也是从object派生而来的,它提供对一些常见API的访问,例如ToString()Equals,但它不是实际上是一个对象(除非“装箱”)-涉及很多魔术。例如,当您使用值类型调用.ToString()时,的含义取决于您是否覆盖了它-它可能是虚拟调用(如果尚未覆盖,则为意思是“装箱”)一个静态调用(如果有的话);如果编译器不确定(泛型,外部类型等),则可以使用“约束”调用(将决定推迟到JIT之前)。

运行时具有根据需要对值类型进行装箱的能力(尽管不一定有效),并且以装箱形式可以说盒子< / em>源自这些东西。

但是,最终,这里重要的不是struct Foo是从ValueType衍生而来的-仅仅是使事情正常进行的实现细节。重要的是,您不能选择任何其他基本类型-与通常从class Bar派生而可以从其他类派生的object形成对比。