我们知道在框架中,许多值类型即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:)
答案 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#语言的限制。