从ValueType继承引用类型

时间:2012-07-17 03:22:58

标签: c# .net vb.net

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

下面的代码示例非常清楚地展示了。

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

    }

    public struct MyStruct : MyClass
    {
    }

所以我虽然生病了尝试通过ilasm.exe做同样的事情,但它给出了奇怪的错误,除了大量的谷歌搜索,我无法解决。无论我对你提出什么问题,在框架内都可以做这种继承,但在外面却无法完成。

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

P.S:不,我在解决现实问题方面没有任何成就。只会满足我的想法和学习。

谢谢&快乐编码,

Zenwalker:)

1 个答案:

答案 0 :(得分: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#语言的限制。

相关问题