寻找对此的澄清......
我听说.Net中的'一切'都是从Object继承而来的.我还听说过值类型和引用类型之间的区别在于引用类型从Object继承而值类型没有.
我的理解是一切都是一个对象(继承自System.Object); 但是价值类型和参考类型只是彼此"不同".值类型在堆栈上分配,引用类型获得放置在堆栈上的"指针",指向堆上的地址.
这是它的要点吗?什么使Integer成为值类型?这是语言固有的东西?
Bro*_*oam 17
值类型,例如Int32,结构.
从VS 2008 C#帮助文件(因为我打开它)在结构上:
结构不能从另一个结构或类继承,也不能作为类的基础.所有结构都直接从System.ValueType继承,该继承自System.Object.
Jon*_*eet 14
这取决于您查看术语的方式 - 这取决于您是在谈论C#还是CLI规范.例如,在CLI规范(ECMA-355)第8.9.8和8.9.10节中说明:
值类型不会继承,但关联的盒装类型是对象类型,因此继承自其他类型.
和
在未装箱的表单中,值类型不会从任何类型继承.盒装值类型应直接继承,
System.ValueType除非它们是枚举,在这种情况下,它们应继承System.Enum.盒装价值类型应密封.
所以从CLI的角度来看,问题的答案是否定的.
但是,让我们看一下C#规范 - 当我们处于类似ECMA的情绪时,让我们选择那个版本(目前停留在C#2).第11.1.1节规定:
所有值类型都隐式继承自类
System.ValueType,而类继承自类object.
所以从C#规范的角度来看,答案是肯定的.
有人可能会说你标记了你的问题".net",所以我们应该使用CLI定义; 如果您将其标记为"c#",我们应该使用C#定义.看看它是多么武断?:)
所有这些规范潜水并没有太多实际目的.答案取决于定义的复杂性.在重要的情况下构建一些有趣的情况更为明智......那么你想做什么?如果您可以提供一些代码,我们可以回答有关将会发生什么的问题 - 这比定义更重要.
(是的,这对我来说很不寻常 - 一般来说,术语对我来说很重要.但是,在某些情况下,细微之处更多的是诅咒而不是祝福.)
根据Red Gate的.NET Reflector,它们(间接地)从对象继承.
我还没有检查过其他类型,但看起来确实如此.我强烈建议使用Reflector - 它是免费下载的,它将帮助您回答有关.NET框架的各个部分如何编码的无数其他问题.有些日子我想知道没有它我会如何生活.
关于反射器的最伟大的事情是,你并不需要依靠某人的可能过期(或不正确或错误解释)写来发现什么是真正打算在.NET框架内-包括在MSDN上-甚至不是万能的微软万无一失.该文档仅与其上次修改一样最新.直接从代码中获得答案是最不可能的 - 当然假设您能够正确地插入代码;)
| 归档时间: |
|
| 查看次数: |
5197 次 |
| 最近记录: |