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

时间:2011-06-12 07:31:17

标签: c# .net types

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

1 个答案:

答案 0 :(得分:14)

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

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

Foo foo = ...

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

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

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

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