使用更多结构?

时间:2009-10-30 03:04:51

标签: c# .net class struct

过去几天有几个问题关于正确使用 null ;这里有三个(一个是我的):

在阅读和思考这个问题时,我想到了这样的想法:为什么不使用struct代替class? (然后我读了很多关于这个的问题。)

struct(在此上下文中)的一个重大优势是它不能为空,因此无需检查null。作为一个额外的好处,如果你真的想要一个空struct,你也可以使用一些额外的语法(T?)和Nullable<>类型。 (太糟糕的引用类型也不像这样工作!)

但是struct是按值传递的,这会导致性能下降。嗯,首先,代码应该是“正确的”( 可能意味着什么),然后快速。但是,有几种方法可以避免真正重要的开销:ref参数,可以为空的参数,将struct放在其他类中,比如List<>

是的,使用struct s,您无法创建类层次结构,但“继承权被滥用”。你可以实现接口。

使用更多基于struct的对象可以使编写多线程代码变得更容易。

struct还有不经常引用的优点吗?这些考虑中的任何一个甚至接近于对class的大规模“先发制人”产生影响吗?

3 个答案:

答案 0 :(得分:3)

我认为你应该坚持使用Null Object,这样的创意会让你陷入困境,并且可能会使代码难以维护。

答案 1 :(得分:1)

struct的最大限制(IMO)是它应该是不可变的。

我有几次定义并使用了一个用户定义的结构,因为你建议的原因(即因为结构不能为null);但是我经常(通过修改结构实例的副本(有时是未命名的临时副本)而不是修改实例本身而经常(直到我学会了永远不会使它们成为不可变的东西)。

答案 2 :(得分:0)

如果你开始在弱类型场景中使用结构(比如分配给对象类型)Object o = structValue;Object o = new mystruct();Object o = default(mystruct);等,那么这些值会被装箱到堆上,它们是使用时也取消装箱。这是一个潜在的缺点,因为它会影响性能。请参阅Microsoft关于boxing and unboxing的信息。