0

我们知道,在框架中,许多值类型即 Int32、Double 等确实继承自引用类型,即抽象类(System.ValueType 和实习生 System.Object 类)。现在我想知道是否可以通过 C# 代码显式模拟类似的概念。是的,我绝对知道 C# 编译器规则会阻止它完成。不知道VB.NET是否也阻塞?

下面的代码示例只是演示得很清楚。

    //Error code : Can not be done
    public abstract class MyClass
    {

    }

    public struct MyStruct : MyClass
    {
    }

所以我虽然尝试通过 ilasm.exe 做同样的事情,但它给出了奇怪的错误,除了大量的谷歌搜索之外我无法解决。我向您提出的任何问题是,在框架内部可以进行这种继承,但在外部则不能。

因此,有什么方法可以模拟这种情况吗?

PS:不,我在解决现实世界问题方面没有取得任何成就。只是会满足我的想法和学习。

感谢和快乐编码,

禅行者:)

4

1 回答 1

2

参见 ECMA 335 (http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf)

第 I.8.9.10 节(值类型继承):

在未装箱的形式中,值类型不继承自任何类型。装箱值类型应直接继承自,System.ValueType除非它们是枚举,在这种情况下,它们应继承自System.Enum。盒装值类型应密封。

逻辑上,装箱的类型对应一个值类型

是一个对象类型。

将指定哪个对象类型是它的基本类型(即,它继承自的对象类型)。

将具有未定义字段的基本类型。

将被密封以避免处理价值切片的复杂性。

此处指定的限制性更强的规则允许更有效的实施,而不会严重损害功能。

因此,非枚举值类型只能从 System.ValueType 继承是通用类型系统的限制,而不是 C# 语言的限制。

于 2012-07-17T06:18:30.237 回答