2010-10-26 86 views
3

可能重复:
When to use struct in C#?我应该使用Struct吗?

嗨,我创建在C#这纯粹是抱着变量类的应用程序,它什么也不做别的,而是设置和获取这些变量。我想知道,为了效率和良好的编码实践,如果我应该将这个类转换为一个结构体,以便正确使用它。我以前从未使用过结构,但一直在研究它们,但是我在使它工作时遇到了一些麻烦。任何意见,将不胜感激!

感谢, 斯图尔特

+0

这是一个确切的副本。不要提供更多答案。这是毫无意义的。 – leppie 2010-10-26 09:27:57

回答

6

如果值模型的集合值类型(即东西,没有自己的并且具有相同值的两个实例的身份被认为是相同)使用一个结构。

否则,请使用一个类。

+0

谢谢,从这我会继续使用一堂课。 – stuartmclark 2010-10-26 09:46:56

0

使用结构代替班级取决于您正在工作的场景。虽然您可以使用结构代替类,但结构缺乏实现访问标识符(如Private,Public,Protected)的功能。如果您只是为了保存变量而使用类,您也可以使用结构,但是如果您的类包含一些私有的,受保护的或公共方法或变量/属性,则不能使用结构。

希望这会有所帮助!

+1

struct *可以*具有私有方法。然而,“保护”方法没有意义,因为你不能从结构派生。 – 2010-10-26 09:19:05

0

结构或类的决定应该基于“我想引用类型语义或值类型语义吗?”

当您使用struct作为参数时,将复制完整的内容。对于一个类只是复制参考。所以一个“大结构”可能会有性能损失!

-1

您使用结构时:

  • 逻辑上表示单个值
  • 有一个实例大小小于16 字节
  • 不会创建之后不得更改
  • 不会被转换为参考类型

参考MCTS 70-536

+0

有时需要具有大于16字节的结构。 '如果你不打算在创建实例后重新分配实例。'你的意思是:'你想要一个类型是(应该是)不可变的' – sloth 2010-10-26 09:20:00

+0

也许你不喜欢那句话,我也不喜欢,我认为现在好多了,MS建议的是什么。 – 2010-10-26 10:11:25

0

在大多数情况下,班级是首选。结构通过价值传递,没有继承等等。你提到效率,这个类可能是性能瓶颈吗?

如果你犯了一个结构不过,请先确认使它immutable

0

我不知道,使用一个结构或没有涉及到良好的编码习惯,但也有使用在某些情况下结构的一些性能优势。例如,MSDN建议大小不超过16字节的类型可能比类更有效地由结构处理。

理解为什么结构可能是更好的选择以及它们的内存如何由运行时管理很重要。必须以最小开销快速执行的库会考虑使用结构(例如XNA框架中的许多数学类型)。还有一些设计问题,比如你的结构总是有一个默认的构造函数;如果你想确保你的类型只能用特定的值构造,那么struct不是最好的选择。

它的长短是,除非你有一个非常具体的理由来使用类的结构,只是坚持类。

如果你想按结构前进,你有什么问题与他们?

0

这真的取决于你想达到的目标。你现在只有getter和setter的事实并不意味着什么。例如,一种类型可能是对从文件读取的应用程序设置进行建模。在某些时候,您可能希望添加一个IsValid()或Normalize()方法。所以在这种情况下,你宁愿去一个类然后一个结构。

当类型的身份由字段的值决定时,应该使用一个结构体。从.NET框架的一个很好的例子是点,其中有X和Y 的第二件事情是,结构应该是便宜的传入和传出功能:

public bool IsInRange(Point point) 
{ 
    // ... 
} 

记住这一点会现场被复制场在这里,这样应该相当便宜。