代码之家  ›  专栏  ›  技术社区  ›  matt_dev

C#结构使用技巧?

  •  8
  • matt_dev  · 技术社区  · 17 年前

    我非常喜欢使用结构体。

    article

    7 回复  |  直到 6 年前
        1
  •  11
  •   Michael Damatov    17 年前

    您应该对结构体进行以下考虑:

    • 结构应该是不可变的(可变结构不直观且不可预测)
    • 结构 总是 具有无法更改的默认(公共无参数)构造函数
    • 结构大小不应超过16字节
    • 这 Equals GetHashCode 为了获得更好的性能,应该覆盖这些方法
    • 实施 IEquatable<T> 建议使用界面
    • 重新定义和 == !=
        2
  •  11
  •   Jon Skeet    17 年前

    我几乎 从不 定义自定义结构。在我看来,自然价值类型并不多。

    我特别认为,

    "Choosing Between Classes and Structures" 从 "Design Guidelines For Developing Class Libraries" .

    特点:

    • 它在逻辑上代表了一个

    • 它的实例大小小于 16字节。

    • 它是不可变的。

    • 它不必经常装箱。

        3
  •  4
  •   Ed Swangren    17 年前

        4
  •  0
  •   abatishchev Karl Johan    17 年前

    我认为结构的主要目的是只保留变量类型。如果你在struct中保留了一些类,那你就错了。

        5
  •  0
  •   danieltalsky    17 年前

    问自己以下关于使用结构体建模的数据集的问题:

    • 获取/设置逻辑?
    • 它是否需要继承另一个集合 数据?
    • 继承这个?

    我认为,如果你对所有这些问题都能真诚地回答“不”,那么就没有充分的理由不使用结构体。我认为在某些情况下,人们会使用静态子类,因为一个结构体已经足够好了。

        6
  •  0
  •   Guffa    17 年前

    结构体不应大于16个字节,否则将失去大部分性能优势。

    结构体旨在成为一种值类型,表示某种类型的单个实体。

    结构体应该是不可变的。这意味着您永远不会更改结构中的任何属性。如果你想要一个不同的结构值,你可以创建一个新值。

        7
  •  0
  •   Chris Shaffer    17 年前

    在很多方面,你可以把C#中的结构体看作是缩小的类。它们基本上与类相同,但更适合于只想将一些数据组合在一起的情况。他们 与班级的区别如下: 有些事情要记住

    • 结构是值类型,而不是 参考类型。这意味着他们是 并且具有相同的寿命 类型。
    • 提供默认的no参数 构造函数,而你不是 允许更换。