代码之家  ›  专栏  ›  技术社区  ›  Ðаn

使用更多结构?

  •  4
  • Ðаn  · 技术社区  · 15 年前

    在过去的几天里,关于正确使用 无效的 ;这里有三个(一个是我的):

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

    大的 A的好处 结构 (在本文中)是指 不能为空 所以不需要检查 null . 作为额外的奖励,如果你真的想要一个空值 结构 你也可以用一些额外的语法来实现。( T? ) Nullable<> 类型。(太糟糕的引用类型也不能这样工作!)

    但是 结构 s通过值传递,该值会降低性能。首先,代码应该是“正确的”(无论什么 那个 可能意味着)然后很快。但是,在真正重要的地方,有几种方法可以避免这种开销: ref 参数,可以为空的参数,将 结构 在其他班级,比如 List<> .

    是的,有 结构 s,不能创建类层次结构,但“继承使用过度”。您可以实现接口。

    使用更多 结构 -基于对象可以使编写多线程代码更加容易。

    是否有更多不常被引用的优势 结构 S?这些考虑中有没有一个甚至接近于在 这是大规模的“先发制人”?

    3 回复  |  直到 15 年前
        1
  •  1
  •   ChrisW    15 年前

    最大的限制 struct 它应该是不变的。

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

        2
  •  3
  •   sylvanaar    15 年前

    我认为你应该坚持 Null Object ,这样的创造性只会给您带来麻烦,可能会降低代码的可维护性。

        3
  •  0
  •   John K    15 年前

    如果您开始在弱类型方案中使用结构(例如分配给对象类型) Object o = structValue; Object o = new mystruct(); Object o = default(mystruct); 等等。这些值被装箱到堆中,并且在使用时也被取消装箱。这是一个潜在的缺点,因为它会影响性能。查看有关Microsoft的信息 boxing and unboxing .