我知道我的问题看起来很蠢,但我很困惑。如果有人能为我澄清一下就好了。
我知道结构体(例如Int32)是值类型,在堆栈中实例化,而类是引用类型,在堆中实例化。我也知道所有的结构体都源自System.Object类型,它是一个类。我想知道这种情况是如何可能的:超类型System.Object是引用类型,子类型Int32是值类型?我应该去哪里查找以了解这是如何工作的呢?
我知道我的问题看起来很蠢,但我很困惑。如果有人能为我澄清一下就好了。
我知道结构体(例如Int32)是值类型,在堆栈中实例化,而类是引用类型,在堆中实例化。我也知道所有的结构体都源自System.Object类型,它是一个类。我想知道这种情况是如何可能的:超类型System.Object是引用类型,子类型Int32是值类型?我应该去哪里查找以了解这是如何工作的呢?
我感兴趣了解人们对编程语言存在的错误观念;你认为哪些关于继承关系的错误观念会阻止值类型从引用类型派生?
你应该阅读并理解以下所有文章:
http://blogs.msdn.com/b/ericlippert/archive/2009/04/27/the-stack-is-an-implementation-detail.aspx
http://blogs.msdn.com/b/ericlippert/archive/2010/09/30/the-truth-about-value-types.aspx
http://ericlippert.com/2011/09/19/inheritance-and-representation/
额外的奖励,这篇文章也可能对你有帮助:
Derived
类型的对象,则(概念上)必须创建一个Base
类型的对象,然后再添加每个进一步派生类型,直到构造出Derived
类型(毕竟,我们在调用链中调用了每个基类构造函数)。因此,要创建一个Int32
,你必须创建一个Object
类型的对象,从而得到一个引用类型。 - Michael Stum