关于C#:我应该使用结构吗?

Should I use a Struct?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
When to use struct in C#?

嗨,我正在创建一个应用程序,它在C中有一个类,纯粹是为了保存变量,它除了设置和获取这些变量之外什么都不做。为了提高效率和良好的编码实践,我想知道是否应该将这个类转换为一个结构,以便正确地使用它。我以前从未使用过结构,但一直在研究它们,但是我在使它工作时遇到了一些困难。任何建议都将不胜感激!

谢谢,斯图尔特


如果收集的值的值类型的模型(,,的东西,并不让人对其自己的身份和两个instances与相同的值被视为是相同的)使用的struct。 P / < >

另有,使用的类。 P / < >


它真的depends C点是什么,你想实现的。"事实上,你目前拥有的只getters和setters并不意味着什么。例如,在类型的可能的建模的应用环境,从阅读的文件。在一些点,你可能会希望给我的isvalid normalize()或()的方法。所以,在这个情况下,你宁愿去的舱,然后在struct。 P / < >

在struct应该被使用,当型的身份也由decided value"的领域。一个很好的例子从.net框架也军校,腹部X和Y。 第二件事是,structs应该到廉价的传球到和从功能: P / < >

1
2
3
4
public bool IsInRange(Point point)
{
    // ...
}

记住那一点会copied field by睾丸的领域,所以,应该公平的廉价。 P / < >


我不相信用的struct或不relates到好的coding practise,但有一些性能效益到用structs在某些环境特征。例如,msdn suggests型的,这是在下的16字节size可能更多的efficiently handled by的struct比的类。 P / < >

它是重要的是要明白为什么在struct可能有更好的选择和他们的知识的记忆也managed由runtime。libraries,必须执行很快与最低的overhead会考虑使用structs(这样一个年代的很多"数学类型在xna框架)。有问题的设计也喜欢事实上你总是struct腹部的违约constructor;如果你想让你的类型的确定只能在constructed与特定的值,然后在struct T是不是最好的选择。 P / < >

的长和短的它,除非你有一个非常具体的原因,要用在structs类,只是坚持与类。 P / < >

如果你想在出版社与structs,你与他们有什么问题吗? P / < >


在现在的用例,类也优先股。structs by value是时代不同了,没有inheritance,等。你提效率,也可能对这类的性能bottleneck吗? P / < >

如果你做的struct虽然让肯定可以让它immutable P / < >


决策为struct或舱应该基于"做我想要的参考semantics类型或值类型的semantics吗?" P / < >

当你使用的struct年代parameter,是copied的完整内容。为的只是类的参考copied也。这样的"大struct"能有性能的废除。 P / < >


用结构物在户籍类depends上scenario C,是你的工作。虽然你可以用结构物在户籍类结构物的能力,但缺乏对implement访问identifiers(这样一个私人的,公共的,protected)。如果你是用类只为持股变量的描述,你可以用结构物为好,但如果你的类contains一些私人的或公共的方法或变量的描述,protected /性质,你不使用的结构物。 P / < >

希望这帮助。 P / < >


当你使用structs: P / < >

  • logically represents单一的价值
  • 腹部的一审"尺寸低于16 字节
  • 不会改变后的创作
  • 不会投到的参考类型

refere到70 mcts 536 P / < >