在.NET中,整数数据类型是值类型(堆栈),String是引用类型(堆)。
因此,如果A类有一个整数,并且其中有一个字符串类型对象,而B类创建了一个A类对象,那么A类的这个对象将如何存储在内存中?在堆栈中,还是在堆中?
我的微软采访中提到了这一点。需要了解我的表现。
答案 0 :(得分:9)
Eric Lippert just wrote about this:
使用堆栈或堆的选择与存储事物的类型有任何根本关系,这是完全错误的。
真实的故事是:
“在桌面CLR上的C#的Microsoft实现中,当值是局部变量或者不是lambda或匿名方法的封闭局部变量的临时变量时,值类型存储在堆栈中,并且方法body不是迭代器块,抖动选择不注册该值。“
最重要的是,他强调你只是不应该关心 type 所在的地方。你应该关心一生中的事情。
答案 1 :(得分:3)
通常,只有局部变量的值类型最终会出现在堆栈中。其余的,包括类的字段,都存储在堆上。
事实上,情况更复杂;请参阅Rex M答案中提供的Eric Lippert博客的链接。答案 2 :(得分:0)
如果我没记错的话,对象总是引用类型,无论其成员类型如何。
因此,A类的任何对象都将存储在堆上。
答案 3 :(得分:0)
这只是一个棘手的问题。我想这个问题要求你检查你对dotnet课程的了解。类是引用类型。所以简单来说就是它会进入堆部分。