C#Struct使用技巧?

时间:2009-03-12 21:42:13

标签: c# data-structures

我喜欢使用结构。

所以在阅读完这篇article之后,我是否还有其他任何问题反对一直使用它们?

另见:

  

7 个答案:

答案 0 :(得分:11)

我几乎从不定义自定义结构。 IMO没有那么多自然价值类型。

特别是,在定义可变结构之前,我会非常认真地非常,特别是如果它通过接口实现进行变异。可变结构的行为方式完全是人们根本没想到的,导致代码难以理解。

我认为值得从"Choosing Between Classes and Structures"阅读"Design Guidelines For Developing Class Libraries"

特别是:

  

除非是,否则不要定义结构   type具有以下所有内容   特性:

     
      
  • 逻辑上代表一个单一的   值,类似于原始类型   (整数,双数等)。

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

  •   
  • 这是不可改变的。

  •   
  • 不必频繁装箱。

  •   

您是否经常开发具有所有这些特征的类型?

答案 1 :(得分:11)

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

  • 结构应该是不可变的(可变结构不直观且不可预测)
  • structs 始终具有无法更改的默认(公共无参数)构造函数
  • struct size不应超过16个字节
  • 应该覆盖EqualsGetHashCode方法以获得更好的效果
  • 建议实施IEquatable<T>界面
  • 还建议重新定义和==以及!=运营商

答案 2 :(得分:4)

它们不像类那样适合面向对象的编程范例。它们适用于小型数据结构,但我使用的是类以外的任何类型。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

结构的使用应限于当您真正需要的只是一个小型数据结构时。 (正如你所读)。我只会将它们用于最小的数据结构,如坐标,偏移,有时用于图形。

在很多方面,你可以认为C#中的结构类似于缩小的类。它们与类基本相同,但设计的更多用于您只想将一些数据组合在一起的情况。他们 通过以下方式与课程不同: 要记住的一些事情

  • 结构是值类型,而不是    参考类型。这意味着他们是    存储在堆栈中或在 -    线(如果它们是另一个的一部分    存储在堆上的对象)    并有相同的寿命    作为简单数据的重新限制    类型。
  • 结构不支持继承。
  • 有一些不同之处 方式构造函数为结构工作。 特别是,编译器总是如此 提供默认的无参数 构造函数,你不是 允许更换。

答案 5 :(得分:0)

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

  • 可能需要任何东西 获取/设置逻辑?
  • 可能需要存储任何逻辑 这是数据特有的吗?
  • 可能需要继承另一套 数据?
  • 可能需要另一组数据 继承这一个?

我想如果你能对所有这些问题尽心尽力地回答“不”,那么没有充分的理由不使用结构。我认为人们在某些情况下使用静态子类,其中结构足够好。

答案 6 :(得分:0)

类比结构更容易实现。如果你错误地实现了一个结构,它会给你一些意想不到的错误。

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

结构体是一种值类型,表示某种形式的单个实体。

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