【发布时间】:2010-12-08 06:30:35
【问题描述】:
在 Microsoft .NET 2.0/3.5 中使用结构而不是某些类有实际理由吗?
“结构和类有什么区别?” - 这可能是“.NET 开发人员”职位空缺面试中最受欢迎的问题。面试官认为正确的唯一答案是“结构在堆栈上分配,类在堆上分配”,对此没有进一步的问题。
一些谷歌搜索显示:
a) 结构与类和
b) 堆栈(因此 结构)可以在非常特殊条件下更快,包括:
- 小于 16 字节的数据块大小
- 没有广泛的装箱/拆箱
- 结构的成员几乎是不可变的
- 整组数据不大(否则会出现栈溢出)
(如有错误或不完整,请更正/添加到此列表中)
据我所知,大多数典型的商业项目(ERM、会计、银行解决方案等)都没有定义一个单一的结构,而是将所有自定义数据类型定义为类。这种方法是否有问题或至少不完善?
注意:问题是关于普通的商业应用程序,请不要列出“不寻常”的案例,如游戏开发、实时动画、向后兼容性(COM/Interop)、非托管代码等 -这些答案已经在这个类似的问题下:
【问题讨论】:
-
“结构在栈上分配,类在堆上分配”。奇怪的是,面试官认为这是正确的答案,因为这不是正确的答案。你应该阅读blogs.msdn.com/ericlippert/archive/2009/04/27/…
-
@Joren 感谢您的链接...它是一个很好的阅读。
-
有些面试官认为任何给定问题的“正确答案”令人惊讶,如果你指出他们最喜欢的答案是错误的,他们可能会非常敌对。更神奇的是,面试官提问是为了引出具体的答案;当我面试时,我会尝试问一些问题,以测试对现实问题进行智能推理、解决歧义和理解复杂代码的能力。对琐事问题说出正确答案并不是大多数开发工作的核心要求。
-
Joren:这被认为是正确的答案,因为 Richter 的“CLR via C#”一书(简要地)说了这一点,而这本书是一些(很多?)采访者的圣经。 Eric:完全同意你关于琐事的(非)重要性的看法,但设法找到(在我所在地区)只有几家公司不询问琐事。