为什么不能从C#中的值类型派生出来?

Rub*_*ote 4 .net c# types

我知道所有值类型都是从System.ValueType隐式派生的.和结构可以实现接口,但我需要知道为什么不能从C#中的值类型派生.

Mar*_*ell 14

首先,值类型没有对象头(因为它们不是对象),因此无法识别实际类型或进行虚拟调度.

其次 - 如何向子类型添加字段?编译器必须知道大小(对于堆栈空间等),因此:

Foo foo = ...
Run Code Online (Sandbox Code Playgroud)

必须始终占用相同的空间.

同样,抽象基类型也不起作用,因为您总是可以构造一个结构.

基本上,他们将是可怕的畸形事物,残缺和丑陋.

我觉得有趣的是你想要一个值的子类型 - 听起来有点像结构的混淆用法.

  • "可怕的畸形事物,跛脚和丑陋".喜欢用C++?! (3认同)
  • 我有时发现自己不需要比单个原始类型更多的数据,但希望为它提供一个有用的标识名称和方法/运算符.例如:位掩码:int. (2认同)