如何/为什么值类型可以从引用类型派生?

Son*_*nül 1 .net c# types value-type reference-type

.NET,所有值类型都继承自名为System.ValueType的类.System.ValueType是一个类,所以它是一个reference type.

我的问题是如何以及为什么可能value type来源于reference type

Tob*_*sey 6

以下是文档中的关键段落

尽管ValueType是值类型的隐式基类,但您无法创建直接从ValueType继承的类.相反,单个编译器提供语言关键字或构造(例如C#中的struct和Visual Basic中的Structure ... End Structure)以支持值类型的创建.

当编译器编译重写的虚方法时,就会发生继承System.Object.的System.ValueType类简单地提供更合适的重载ToString(),GetHashCode()等.作为文件指出编译器使用,如果这些重载struct关键字用于(在C#).这告诉编译器使用System.ValueType方法而不是System.Object方法.

  • 严格来说,它仍然使用`System.Object`方法; 但是:它将它们作为`约束`+``callvirt`调用(而不仅仅是`callvirt`) (2认同)